Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 动态更改正在唤醒的内容_Unix_Dynamic_Awk_Grep - Fatal编程技术网

Unix 动态更改正在唤醒的内容

Unix 动态更改正在唤醒的内容,unix,dynamic,awk,grep,Unix,Dynamic,Awk,Grep,我的意见如下: 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

我的意见如下:

 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”
。那它就需要知道了

行格式有很多变化(在字段数量上)。也就是说,像这样的事情怎么样:

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

行格式有很多变化(在字段的数量上)。也就是说,像这样的事情怎么样:

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

嗯,你的问题很分散,原则上你想让别人写你的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数据列数的文件


再次重申:请学习awk手册页。另外,在提问时,请提供您尝试过的内容(代码)和错误(日志)。这将使人们更愿意帮助你。

好吧,你的问题很分散,原则上你希望别人写你的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数据列数的文件


再次重申:请学习awk手册页。另外,在提问时,请提供您尝试过的内容(代码)和错误(日志)。这将使人们更愿意帮助你。

我想你只是在寻找:

#!/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
#/垃圾箱/垃圾箱

awk'NR==1{for(i=1;i我想你只是在寻找:

#!/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
!/bin/sh

awk'NR==1{对于(i=1;对不起,我应该更具体一点,他正在输入标题名作为输入。例如“H3”。然后它需要awk。对不起,我应该更具体一点,他正在输入标题名作为输入。例如“H3”。然后它需要awk。cat的无用用法:
awk…<$1
。在某些情况下(旧)shell,多余的分号是一个语法错误。
{if($(a)=b{print$0}}
更习惯于使用
$a==b
无用的cat:
awk…
。在一些(旧)shell中,多余的分号是一个语法错误。
{if($(a)==b{print$0}
写得更为地道。
$a==b
@joepd是的,我试图重新标记为[家庭作业],但发现该标记已被废弃。这是非常非常非常大的家庭作业中非常非常非常小的一部分。@joepd是的,我试图重新标记为[家庭作业]但是我看到那个标签已经过时了,这只是一个非常大的家庭作业的一小部分。