Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
使用awk打印多个文件的第一列_Awk - Fatal编程技术网

使用awk打印多个文件的第一列

使用awk打印多个文件的第一列,awk,Awk,我有20个文件,我想将每个文件的第一列打印到不同的文件中。我需要20个输出文件 我尝试了下面的命令,但这个命令将所有输出放在一个文件中 awk '{print $1}' /home/gee/SNP_data/20* > out_file 将输出写入不同的文件,我有20个输入文件第一个解决方案:请尝试以下内容 awk ' FNR==1{ if(file){ close(file) } file="out_file_"FILENAME".txt" } { print

我有20个文件,我想将每个文件的第一列打印到不同的文件中。我需要20个输出文件

我尝试了下面的命令,但这个命令将所有输出放在一个文件中

awk '{print $1}' /home/gee/SNP_data/20* > out_file
将输出写入不同的文件,我有20个输入文件第一个解决方案:请尝试以下内容

awk '
FNR==1{
  if(file){
    close(file)
  }
  file="out_file_"FILENAME".txt"
}
{
  print $1 > (file)
}
' /home/gee/SNP_data/20*
解释:为上述代码添加解释

awk '                                     ##Starting awk program here.
FNR==1{                                   ##checking condition if FNR==1 then do following.
  if(file){                               ##Checking condition if variable file is NOT NULL then do following.
    close(file)                           ##Using close to close the opened output file in backend, to avoid too many opened files error.
  }                                       ##Closing BLOCK for if condition.
  file="out_file_"FILENAME".txt"          ##Setting variable file value to string out_file_ then FILENAME(which is Input_file) and append .txt to it.
}                                         ##Closing BLOCK for condition for FNR==1 here.
{
  print $1 > (file)                       ##Printing first field to variable file here.
}
' /home/gee/SNP_data/20*                  ##Mentioning Input_file path here to pass files here.


第二种解决方案:如果您需要获取输出文件,如
output\u file\u 1.txt
ans等,请尝试以下操作。我已经创建了一个名为
out\u file
的awk变量,您可以在其中更改输出文件名的首字母(根据需要)


Awk有一个内置的重定向操作符,您可以像这样使用它:

awk '{ print $1 > ("out_" FILENAME) }' /home/gee/SNP_data/20*
或者,更好的是:

awk 'FNR==1 { close(f); f=("out_" FILENAME) } { print $1 > f }' /home/gee/SNP_data/20*

前者只是重定向操作符的一个示例用法,后者是如何可靠地使用它。

对于那些拥有关闭/重新打开投票权限的人:@Cyrus,您好,先生,我可以将其作为Dup关闭。但是,当我检查上面提到的链接时,我可以看到只提供了附加输出的解决方案,但这里OP说有20个输出文件,所以我认为它与此链接不同,如果有任何其他相同的链接,将作为dup关闭它。@RavinderSingh13:此链接应该用于理解问题的背景。
awk 'FNR==1 { close(f); f=("out_" FILENAME) } { print $1 > f }' /home/gee/SNP_data/20*