我在下面输入了这个输入:
IDNO H1 H2 H3 HT Q1 Q2 Q3 Q4 Q5 M1 M2 EXAM
OUT OF 100 100 150 350 30 30 30 30 30 100 150 400
1434 22 95 135 252 15 20 12 18 14 45 121 245
1546 99 102 140 341 15 17 14 15 23 91 150 325
2352 93 93 145 331 14 17 23 14 10 81 101 260
(et cetera)
H1 H2 H3 HT Q1 Q2 Q3 Q4 Q5 M1 M2 EXAM
OUT OF 100 100 150 350 30 30 30 30 30 100 150 400
我需要使用编写unix脚本来使用awk函数动态查找输入的任何列并将其显示在屏幕上。我已经成功地删除了特定的列,但我似乎无法弄清楚如何根据不同的列进行更改。我的讲师只需选择一列测试数据,我的程序需要找到该列。
我正在尝试的是:#!/bin/sh
awk {'print $(I dont know what goes here)'} testdata.txt
编辑:对不起,我应该更具体,他输入标题名称作为输入。例如"H3"
。然后它需要唤醒它。
答案 0 :(得分:1)
我认为你只是在寻找:
#!/bin/sh
awk 'NR==1{ for( i = 1; i <= NF; i++ ) if( $i == header ) col=i }
{ print $col }' header=${1?No header entered} testdata.txt
这不会尝试处理未出现的列标题 在输入中。 (留给读者练习。)
答案 1 :(得分:0)
您的行格式有很多变化(字段数)。那就是这样的事情:
echo "Which column name?"
read column
case $column in
(H1) N=2;;
(H2) N=3;;
(H3) N=4;;
...
(*) echo "Please try again"; exit 1;;
esac
awk -v N=$N '{print $N}' testdata.txt
答案 2 :(得分:0)
嗯,你的问题非常分散,原则上你希望别人写你的awk脚本......你应该检查awk的手册页,它们是非常具有描述性的。
我的2分麦芽汁,作为一个例子(对于行): myscript.sh:
#/bin/sh
cat $1 | awk -v a=$2 -v b=$3 '{if ($(a)==b){print $0}}';
如果你只想要一个专栏,那么,
#/bin/sh
cat $1 | awk -v a=$2 '{print $(a)}';
您的输入将是:
myscript.sh file_of_data col_num
再次重申:请研究awk的手册页。当问问题时你还要问你所尝试的(代码)和错误(日志)。这将使人们更愿意为您提供帮助。