Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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
Linux 将文件中的第一行复制到最后一行_Linux_Bash_Awk - Fatal编程技术网

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