Linux 将文件中的第一行复制到最后一行
这里的目的是将文件中的第一行复制到最后一行 这里是输入文件Linux 将文件中的第一行复制到最后一行,linux,bash,awk,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,
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
使用下面的代码,我得到了所需的输出。还有其他简单的选择吗
awk 'NR==1 {print}' FF1-1.csv > tmp1
cat FF1-1.csv tmp1
期望输出
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
提前感谢。将行保存在变量中,并在末尾使用块打印
head
可以产生与您的awk
相同的输出,因此您可以用cat
代替
您可以使用来避免临时文件
cat FF1-1.csv <(head -n 1 FF1-1.csv)
另一种选择是将
头的输出通过管道输送到cat
,并用-
引用它,对于cat
,它代表标准输入:
head -1 FF1-1.csv | cat FF1-1.csv -
以下解决方案也可能对相同的问题有所帮助:
解决方案1:仅使用awk
并在此处使用RS
和FS
(不使用变量):
第二种解决方案:使用cat
和head
:
cat Input_file && head -n1 Input_file
使用GNU时:
seq 1 5 | sed '1h;$G'
输出:
1
2
3
4
5
1
1.
2.
3.
4.
5.
1.
1h
:第一行:将当前行(模式空间)复制到sed的保留空间
$G
:在最后一行($
):将内容从保留空间追加到模式空间
请参阅:man sed
当您想要覆盖现有解决方案时,正常解决方案可能会失败:不要写入正在使用的文件。
编辑文件的解决方案是:
printf "%s\n" 1y $ x w q | ed -s file > /dev/null
说明:
printf
将有助于在新行中输入所有命令。
1y
将第一行放入buf。
$
移到最后一行。
x
将粘贴buf的内容。
w
将写入结果。
q
将退出编辑器。
ed
是执行所有工作的编辑器。
-s
正在抑制诊断。
文件
是您的输入文件。
/dev/null
正在禁止输出到您的屏幕。很好,如果进程替换不可用,cat文件;head-n1文件
显示结果,(cat文件;head-n1文件)>op_文件
保存结果,依此类推。。
seq 1 5 | sed '1h;$G'
1
2
3
4
5
1
printf "%s\n" 1y $ x w q | ed -s file > /dev/null