将第一行复制到文件中的最后一行

OXX*_*XXO 3 linux bash awk

这里的目的是将文件中的第一行复制到最后一行

这里是输入文件

335418.75,2392631.25,36091,38466,1
335418.75,2392643.75,36092,38466,1
335418.75,2392656.25,36093,38466,1
335418.75,2392668.75,36094,38466,1
335418.75,2392681.25,36095,38466,1
335418.75,2392693.75,36096,38466,1
335418.75,2392706.25,36097,38466,1
335418.75,2392718.75,36098,38466,1
335418.75,2392731.25,36099,38466,1
Run Code Online (Sandbox Code Playgroud)

使用以下代码,我得到了所需的输出.还有其他简单的选择吗?

  awk 'NR==1 {print}' FF1-1.csv > tmp1
  cat FF1-1.csv tmp1
Run Code Online (Sandbox Code Playgroud)

输出所需

335418.75,2392631.25,36091,38466,1
335418.75,2392643.75,36092,38466,1
335418.75,2392656.25,36093,38466,1
335418.75,2392668.75,36094,38466,1
335418.75,2392681.25,36095,38466,1
335418.75,2392693.75,36096,38466,1
335418.75,2392706.25,36097,38466,1
335418.75,2392718.75,36098,38466,1
335418.75,2392731.25,36099,38466,1
335418.75,2392631.25,36091,38466,1
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Sun*_*eep 5

将线保存在变量中,并使用END块在末尾打印

$ seq 5 | awk 'NR==1{fl=$0} 1; END{print fl}'
1
2
3
4
5
1
Run Code Online (Sandbox Code Playgroud)


Aar*_*ron 5

head可以产生与您的 相同的输出awk,因此您可以cat改为使用它。

您可以使用进程替换来避免临时文件。

cat FF1-1.csv <(head -n 1 FF1-1.csv)
Run Code Online (Sandbox Code Playgroud)

正如Sundeep所提到的,如果进程替换不可用,您可以简单地cat将文件然后head按顺序获得相同的结果,如果您需要重定向输出,则将两者都放在子shell中:

(cat FF1-1.csv; head -n1 FF1-1.csv) > dest
Run Code Online (Sandbox Code Playgroud)

另一替代方案将是管的输出head,以cat及指其与-其中用于cat表示标准输入:

head -1 FF1-1.csv | cat FF1-1.csv -
Run Code Online (Sandbox Code Playgroud)