首页 > 解决方案 > 在脚本中为特定行长度添加条件

问题描述

我想修改以下脚本:

awk 'NR>242 && $1 =='$t' {print $4, "\t" '$t'}' test.txt > file

我想为第一个“1 到 121”数据(对应于前 121 个点)然后为“122 到 242”数据(对应于其他 121 个点)添加一个条件。

所以它变成:

当 NR>242 取行从 1 到 121 的相应值时,将它们打印到 file1

当 NR>242 将行的相应值从 121 到 242 打印到 file2

谢谢!

标签: if-statementawkrowsmultiple-conditions

解决方案


通用解决方案:在此处添加更多通用解决方案,您可以在其中提供lines变量awk。一旦行号与值匹配,它将用 1 增加文件的计数器,例如:从 file1 到 file2 或 file2 到 file3 等等......

awk -v val="$t" -v lines="121,242" -v count=1'
BEGIN{
num=split(lines,arr,",")
for(i=1;i<=num;i++){
  line[arr[i]]
  outputfile="file"count
}
}
FNR in arr[i]{
  close(outputfile)
  outputfile="file"++count
}
($1 == val){
  print $4 "\t" val > (outputfile)
}
' Input_file


使用您显示的示例,请尝试以下操作。这将从第 1 行到第 242 行的所有行打印到 file1,从第 243 行开始打印输出到 file2。程序还有一个名为的 shell 变量t传递到awk程序的变量val中。

awk -v val="$t" '
FNR==1{
  outputfile="file1"
}
FNR==243{
  outputfile="file2"
}
($1 == val){
  print $4 "\t" val > (outputfile)
}
' Input_file

推荐阅读