我的任务是编写一个脚本,该脚本将过滤来自MQ命令的输入,并将输出重定向到另一个文件。我一直在使用连接在一起的许多其他Linux命令,它似乎在Linux中运行得很好,但是我的经理需要在AIX系统上运行脚本,所以UNIX操作系统。我意识到,在Linux上运行良好或在Linux中完成任务的许多命令将在UNIX或基于UNIX的系统上产生完全不同的输出。runmqsc命令的输出如下所示:
5724-H72 (C) Copyright IBM Corp. 1994, 2009. ALL RIGHTS RESERVED.
Starting MQSC for queue manager CNUMQ02B.
样本数据
wolf@linux:~$ awk {print} file.txt
a b
b c
c d
wolf@linux:~$
这很容易做到,因为数据非常小。
wolf@linux:~$ awk 'BEGIN {print " " 1 " " 2} {print NR,$0}' file.txt
1 2
1 a b
2 b c
3 c d
wolf@linux:~$
对于更大的数据有类似的解决方案吗?我正在考虑在BEGIN {print " " 1 " " 2}部件上使用类似于D3的东西,而不是手
好吧。我又一次把头撞到Linux墙上了。我在这里做错了什么:
#! /bin/bash
echo
echo "1. Windows (Microsoft)
echo 2. Linux (Red Hat)
echo 3. MacOS (Apple)
echo
echo -n Select your OS choice [1, 2 or 3]: "
READ OS
echo
if [ "$OS" -eq 1 ]; then
echo "You picked Windows (Microsoft)."
fi
if [ "$OS"
我有一个简单的awk one一行,当给定的模式匹配时,它将下一行折叠到当前行上。这就是它:
awk '/two/ { printf $1; next; } 1' test.txt
输入如下:
one
two
three
four
five
six
one
two
three
four
你会得到:
one
twothree
four
five
six
one
twothree
four
请注意,“三”与“二”折叠在一起,这就是我想要发生的。我找到了这个解决方案(不记得在哪里了),我觉得奇怪的是,尾随的'1‘似乎是导致预期效果的缺失部分。如果你把它拿出来,你会得到