此处的目的是将文件中的第一行复制到最后一行
这里是输入文件
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
提前致谢。
答案 0 :(得分:5)
将行保存在变量中并使用END块
打印到最后$ seq 5 | awk 'NR==1{fl=$0} 1; END{print fl}'
1
2
3
4
5
1
答案 1 :(得分:4)
head
可以生成与awk
相同的输出,因此您可以cat
代替。{/ p>
您可以使用process substitution来避免临时文件。
cat FF1-1.csv <(head -n 1 FF1-1.csv)
正如Sundeep所提到的,如果流程替换不可用,您可以简单地cat
该文件,然后按顺序head
获取相同的结果,将两者放在子shell中你需要重定向输出:
(cat FF1-1.csv; head -n1 FF1-1.csv) > dest
另一种方法是将head
的输出管道传输到cat
,然后用-
引用它,cat
表示标准输入:
head -1 FF1-1.csv | cat FF1-1.csv -
答案 2 :(得分:2)
使用GNU sed:
seq 1 5 | sed '1h;$G'
输出:
1 2 3 4 5 1
1h
:复制第一行以保留空格
$G
:在最后一行为模式空间追加保留空间
答案 3 :(得分:2)
如果要覆盖现有的正常解决方案,则可能会失败:请勿写入正在使用的文件。
编辑file
的解决方案是:
printf "%s\n" 1y $ x w q | ed -s file > /dev/null
说明:
printf
将有助于输入新行中的所有命令
1y
会将第一行放入buf中
$
移至最后一行
x
会粘贴buf的内容。
w
会写出结果。
q
将退出编辑器。
ed
是执行所有工作的编辑
-s
正在抑制诊断
file
是您的输入文件。
> /dev/null
正在抑制屏幕输出。
答案 4 :(得分:1)
以下解决方案也可能有所帮助:
解决方案第一: 只需在awk
使用RS
和FS
(不使用变量),只需使用awk -v RS="" -v FS="\n" '{print $0 ORS $1}' Input_file
:
cat
解决方案第二: 使用head
和cat Input_file && head -n1 Input_file
:
@Suite.SuiteClasses(...)