带有可变参数的Unix脚本

时间:2014-07-23 09:03:09

标签: unix awk

所以我要拧一个需要多个文件的脚本,比较它们然后输出不同的记录。

该脚本适用于3个参数(3个文件),但我无法使参数变化。

考虑脚本名为Test。

如果我写:Test 1.txt 2.txt, 该脚本将知道我有2个输入,这是2个文件,并将比较它们并给我一个输出。

此外,如果我写Test 1.txt 2.txt 3.txt, 该脚本将知道我有3个输入,这是3个文件,比较它们并给我一个输出。

该脚本现在具有以下命令:

awk 'NR>2' ${1} | awk '{print $NF "\r"}' > N1
awk 'NR>2' ${2} | awk '{print $NF "\r"}' > N2
awk 'NR>2' ${3} | awk '{print $NF "\r"}' > N3

这适用于3个文件,但问题是有时我有2个文件,有时我有4个文件。

我知道我可以使用循环修复它,但我是这种语言的新手,并且不太熟悉语法。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

使用它:

x=1
for i in "$@"
do
  awk 'NR>2' $i | awk '{print $NF "\r"}' > N$x
  x=$(($x+1))
done

$@:输入参数列表

答案 1 :(得分:1)

您的awk命令可以合并:awk 'NR>2 {print $NF "\r"}' "$1" > N1

更好的是,一个awk命令可以处理所有文件:

awk '
    FNR == 1 {output = "N" ++count}
    FNR > 2  {print $NF "\r" > output}
' "$@"

"一个人要统治他们"