Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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/0/backbone.js/2.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 - Fatal编程技术网

Linux中如何在带标题的制表符分隔文件中添加行名

Linux中如何在带标题的制表符分隔文件中添加行名,linux,Linux,我正在处理一个具有数千行和标题的表文件。 但我必须在每行中添加行名row name代表行号。 我如何在linux中做到这一点 我可以用excel完成这项工作,但是文件太多了,所以我希望我能写下linux命令来处理它 我的文件看起来像这样 parameter1 parameter2 paramter3 1.2 1.3 1.4 2.1 2.1 1.5 1.5 1.6 2.1 .... 我想添加行名称,如下所示: sim parameter1 parameter2 paramter3 AM_1_ar

我正在处理一个具有数千行和标题的表文件。 但我必须在每行中添加行名row name代表行号。 我如何在linux中做到这一点

我可以用excel完成这项工作,但是文件太多了,所以我希望我能写下linux命令来处理它

我的文件看起来像这样

parameter1 parameter2 paramter3
1.2 1.3 1.4
2.1 2.1 1.5
1.5 1.6 2.1
....
我想添加行名称,如下所示:

sim parameter1 parameter2 paramter3
AM_1_arp 1.2 1.3 1.4
AM_2_arp 2.1 2.1 1.5
AM_3_arp 1.5 1.6 2.1
....
如何使用linux命令执行这些操作?

使用awk:

 awk 'NR==1{print "sim "$0;next}{print "AM_"NR-1"_arp "$0}' yourfile
也就是说:

如果这是第一行标题行NR==1,则打印sim加上整行:打印sim$0; 转到下一行,跳过下一个程序的其余部分 对于遇到的任何其他行,打印AM加上行号NR加上arp,然后整行$0。 如果目录中有许多文件需要执行此操作,则可以通过通配符引用这些文件,并且可以在awk中重定向输出:

awk 'NR==1{print "sim "$0 > FILENAME"_out";next}{print "AM_"NR-1"_arp "$0 > FILENAME"_out"}' ./yourfile*
使用awk:

 awk 'NR==1{print "sim "$0;next}{print "AM_"NR-1"_arp "$0}' yourfile
也就是说:

如果这是第一行标题行NR==1,则打印sim加上整行:打印sim$0; 转到下一行,跳过下一个程序的其余部分 对于遇到的任何其他行,打印AM加上行号NR加上arp,然后整行$0。 如果目录中有许多文件需要执行此操作,则可以通过通配符引用这些文件,并且可以在awk中重定向输出:

awk 'NR==1{print "sim "$0 > FILENAME"_out";next}{print "AM_"NR-1"_arp "$0 > FILENAME"_out"}' ./yourfile*
我将在每一行的开头添加您选择的字符串,其中有一个计数器,然后将第一个实例替换为sim作为标题


我将在每一行的开头添加您选择的字符串,其中有一个计数器,然后将第一个实例替换为sim作为标题。

谢谢,我尝试了该代码,它确实打印了行名。但NF似乎不起作用,所有行名称都是相同的AM_10_ARP,这很奇怪。我从来没有遇到过不工作的人。我很高兴看到I++计数器版本正在发挥作用!我也尝试过这个版本,我也得到了一个奇怪的数字,比如:AM_3_arp,AM_3_arp,AM_2_arp,AM_2_arp。我用GNUAWK3.1试过了。7@JNevillNF是字段数,你是说NR吗?@oguzismail OMG谢谢你!。显然我需要更多的咖啡。写了这么多年,我还是搞砸了。谢谢,我试过代码,它确实打印了行名。但NF似乎不起作用,所有行名称都是相同的AM_10_ARP,这很奇怪。我从来没有遇到过不工作的人。我很高兴看到I++计数器版本正在发挥作用!我也尝试过这个版本,我也得到了一个奇怪的数字,比如:AM_3_arp,AM_3_arp,AM_2_arp,AM_2_arp。我用GNUAWK3.1试过了。7@JNevillNF是字段数,你是说NR吗?@oguzismail OMG谢谢你!。显然我需要更多的咖啡。写了这么多年,我还是搞砸了。