将第二行txt文件合并在一起

时间:2019-03-07 19:06:46

标签: bash awk cat

我有几百个txt文件,每个文件有2行。

要合并它们,我通常会这样做:

cat *.txt > final.txt

但是,我只需要对每个文件的第二行执行此操作,因此最终输出就像

2nd line of 1st file
2nd line of 2nd file
2nd line of 3rd file
(and so on..)

有什么想法可以实现这一目标吗?

5 个答案:

答案 0 :(得分:1)

第一个解决方案: :能否请您尝试使用GNU awknextfile是GNU awk中非常好的选择,当条件为MET时,它将跳过当前Input_file中的所有行。

awk 'FNR==2{print;nextfile}' *.txt > output_file


第二个解决方案: :如果您没有GNU awk,请尝试。在这里,由于我们假设nextfile中没有awk,所以我在每个文件的第二行上创建一个flag,当它为TRUE时,简单地转到下一行/跳过它们并尝试保存某个时候注意,该标志值也将在每个文件的第一行上重置。

awk 'FNR==1{flag=""} FNR==2{print;flag=1} flag{next}'  *.txt > output_file


第三种解决方案: 这里也使用whilefind添加了headtail方法。 AFAIK的头部和尾部不应读取整个文件。

while read line
do
  head -n +2 "$line" | tail -1 
done <  <(find -type f -name "*.txt") > "output_file"

答案 1 :(得分:1)

使用GNU sed:

sed -n -s 2p *.txt > final.txt

sed -s '2!d' *.txt > final.txt

来自man sed

  

-s:将文件视为独立文件,而不是单个连续的长流文件。

答案 2 :(得分:0)

find . -name "*.txt" -type f -exec awk 'NR==2' {} \;

答案 3 :(得分:0)

使用awk

awk 'FNR == 2 { print; nextfile }' *.txt > final.txt

FNR包含当前文件中的行号。在第2行上时,它将打印该行,然后转到下一个文件。

答案 4 :(得分:0)

使用Perl

 perl -ne ' if($.==2) { print ; close(ARGV) } ' *.txt

带有示例文件

$ cat allison1.txt
line1 in file1
line2 in file1

$ cat allison2.txt
line1 in file2
line2 in file2

$ cat allison3.txt
line1 in file3
line2 in file3

$  perl -ne ' if($.==2) { print ; close(ARGV) } ' allison*txt
line2 in file1
line2 in file2
line2 in file3

$