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_Awk - Fatal编程技术网

具有可变参数的Unix脚本

具有可变参数的Unix脚本,unix,awk,Unix,Awk,因此,我正在编写一个脚本,它将获取多个文件,比较它们,然后输出不同的记录 脚本对于3个参数(3个文件)运行良好,但是我很难改变参数 考虑脚本名为Test 如果我写:test1.txt 2.txt, 脚本将知道我有2个输入,这是2个文件,并将比较它们,给我一个输出 此外,如果我写test1.txt 2.txt 3.txt, 脚本将知道我有3个输入,即3个文件,比较它们并给我一个输出 该脚本现在具有以下命令: awk 'NR>2' ${1} | awk '{print $NF "\r"}' &

因此,我正在编写一个脚本,它将获取多个文件,比较它们,然后输出不同的记录

脚本对于3个参数(3个文件)运行良好,但是我很难改变参数

考虑脚本名为Test

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

此外,如果我写
test1.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个文件

我知道我可以用循环来解决这个问题,但我对这种语言不熟悉,也不太熟悉语法

感谢您的帮助:)

使用此:

x=1
for i in "$@"
do
  awk 'NR>2' $i | awk '{print $NF "\r"}' > N$x
  x=$(($x+1))
done
$@
:输入参数列表

使用以下选项:

x=1
for i in "$@"
do
  awk 'NR>2' $i | awk '{print $NF "\r"}' > N$x
  x=$(($x+1))
done
$@
:输入参数列表

使用以下选项:

x=1
for i in "$@"
do
  awk 'NR>2' $i | awk '{print $NF "\r"}' > N$x
  x=$(($x+1))
done
$@
:输入参数列表

使用以下选项:

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

$@
:输入参数列表

您的awk命令可以组合使用:
awk'NR>2{print$NF'\r'''1'>N1

更好的是,使用单个awk命令来处理所有文件:

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

“一个awk来统治它们”

您的awk命令可以组合使用:
awk'NR>2{print$NF“\r”}'$1>N1

更好的是,使用单个awk命令来处理所有文件:

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

“一个awk来统治它们”

您的awk命令可以组合使用:
awk'NR>2{print$NF“\r”}'$1>N1

更好的是,使用单个awk命令来处理所有文件:

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

“一个awk来统治它们”

您的awk命令可以组合使用:
awk'NR>2{print$NF“\r”}'$1>N1

更好的是,使用单个awk命令来处理所有文件:

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

“一个awk来统治他们所有人”

很好的简短回答!请注意,递增的
x
也可以编写
((x++)
,这是一种较短的语法,所有程序员都更容易记住:)这是错误的,但很容易修复。为了使引用的参数正常工作,您必须在
$@
周围使用双引号。@tripleee的建议是,引用
“$@”
——这将打破您第一次使用带有空格的文件名。回答得很好!请注意,递增的
x
也可以编写
((x++)
,这是一种较短的语法,所有程序员都更容易记住:)这是错误的,但很容易修复。为了使引用的参数正常工作,您必须在
$@
周围使用双引号。@tripleee的建议是,引用
“$@”
——这将打破您第一次使用带有空格的文件名。回答得很好!请注意,递增的
x
也可以编写
((x++)
,这是一种较短的语法,所有程序员都更容易记住:)这是错误的,但很容易修复。为了使引用的参数正常工作,您必须在
$@
周围使用双引号。@tripleee的建议是,引用
“$@”
——这将打破您第一次使用带有空格的文件名。回答得很好!请注意,递增的
x
也可以编写
((x++)
,这是一种较短的语法,所有程序员都更容易记住:)这是错误的,但很容易修复。为了使引用的参数正常工作,您必须在
$@
周围使用双引号。@tripleee建议,并引用
“$@”
——这将在您第一次使用带有空格的文件名时中断。