Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
File 如何在一行unix命令中连接两个文件(删除第二个文件的第一行)?_File_Unix_Sed_Merge - Fatal编程技术网

File 如何在一行unix命令中连接两个文件(删除第二个文件的第一行)?

File 如何在一行unix命令中连接两个文件(删除第二个文件的第一行)?,file,unix,sed,merge,File,Unix,Sed,Merge,我试图通过将两个文件(file1和file2)堆叠在一起来创建一个新文件(比如file3)。我需要整个file1,但要排除file2的第一行。我现在使用的是两步流程,使用head和sed cat file1.csv file2.csv > file3.csv sed -i 1001d file3.csv 最后一步要求我在删除后一行之前找出file1的长度,以便它与file2的第一行相对应。如何将这两行代码组合成一行代码?我尝试了这个,但失败了: cat file1.csv sed 1d

我试图通过将两个文件(
file1
file2
)堆叠在一起来创建一个新文件(比如
file3
)。我需要整个
file1
,但要排除
file2
的第一行。我现在使用的是两步流程,使用
head
sed

cat file1.csv file2.csv > file3.csv
sed -i 1001d file3.csv
最后一步要求我在删除后一行之前找出
file1
的长度,以便它与
file2
的第一行相对应。如何将这两行代码组合成一行代码?我尝试了这个,但失败了:

cat file1.csv sed 1d file2.csv > file3.csv

一种方法是
cat file1.csv>file3.csv;尾部-n+2 file2.csv>>file3.csv


另一种是
tail-n+2 file2.csv | cat file1.csv->file3.csv
一种是
cat file1.csv>file3.csv;尾部-n+2 file2.csv>>file3.csv


另一个是
tail-n+2 file2.csv | cat file1.csv->file3.csv

您可以使用进程替换,如:

cat file1.csv <(tail -n +2 file2.csv) > file3.csv
cat file1.csv file3.csv

您可以使用流程替换,如:

cat file1.csv <(tail -n +2 file2.csv) > file3.csv
cat file1.csv file3.csv

您可以使用第二次尝试,但使用流程替换:

cat file1.csv <(sed '1d' file2.csv) > file3.csv
或者,您可以使用awk:

awk 'FNR!=NR && FNR==1 {next} 1' file{1,2}.csv > file3.csv

FNR=如果我们不在第一个文件中(文件记录编号不等于总记录编号),则NR
为真,并且每个文件的第一行上的
FNR==1
为真。除第一个文件外,每个文件的第一行上的条件都为真<代码>下一步跳过该行<代码>1打印所有其他行。

您可以使用第二次尝试,但使用进程替换:

cat file1.csv <(sed '1d' file2.csv) > file3.csv
或者,您可以使用awk:

awk 'FNR!=NR && FNR==1 {next} 1' file{1,2}.csv > file3.csv

FNR=如果我们不在第一个文件中(文件记录编号不等于总记录编号),则NR
为真,并且每个文件的第一行上的
FNR==1
为真。除第一个文件外,每个文件的第一行上的条件都为真<代码>下一步跳过该行
1
打印所有其他行。

您可以使用如下复合语句:

{ cat file1.csv; sed '1d' file2.csv; } > file3.csv

您可以使用这样的复合语句:

{ cat file1.csv; sed '1d' file2.csv; } > file3.csv

您的问题应包括简洁、可测试的示例输入和预期输出。您的问题包括简明的、可测试的示例输入和预期的输出。我尝试了您的第一个选项和它的其他变体,得到了以下错误:
sh.exe“:无法为进程替换生成管道:函数未实现
您的shell似乎不支持进程替换。我将更新答案。我正在使用git Bash。您应该编辑您的问题,以包括您正在使用的shell。我尝试了您的第一个选项和它的其他变体,但出现以下错误:
sh.exe“:无法为进程替换生成管道:函数未实现
您的shell似乎不支持进程替换。我将更新答案。我使用的是git Bash。您应该编辑您的问题,以包括您正在使用的shell。此选项有效。非常感谢。大括号内的代码逻辑是什么?第一条语句打印
file1.csv
的内容,第二条语句打印
file2.csv
的内容,但由于
1d
而删除/忽略第一行。然后将这两条语句的组合输出写入
file3.csv
。就像你要求的那样;-)这很有效。非常感谢。大括号内的代码逻辑是什么?第一条语句打印
file1.csv
的内容,第二条语句打印
file2.csv
的内容,但由于
1d
而删除/忽略第一行。然后将这两条语句的组合输出写入
file3.csv
。就像你要求的那样;-)