我有一堆文件
an_ar_chrom10_pos1_sun_td.txt
an_ar_chrom11_pos1_sun_td.txt
an_ar_chrom13_pos1_sun_td.txt
an_ar_chrom17_pos1_sun_td.txt
an_ar_chrom17_pos2_sun_td.txt
...
每个文件都有类似的格式看起来像这样
head an_ar_chrom10_pos1_sun_td.txt
"region" "start" "stop" "mid" "G1_TD" "G2_TD" "G3_TD" "G4_TD"
"45000002 - 45010001 " 45000002 45010001 90.010003 NA NA NA NA
"45010002 - 45020001 " 45010002 45020001 90.030003 -1.19087678772119 -0.947895467698369 -0.724767209958411 -0.957244005901499
"45020002 - 45030001 " 45020002 45030001 90.050003 NA NA NA NA
"45030002 - 45040001 " 45030002 45040001 90.070003 NA NA NA NA
我想根据每个文件名中的一些唯一字符为每个文件添加一个额外的列(例如,第一个文件的 chrom10_pos1,第二个文件的 chrom11_pos1 等
这是我想要的输出
head an_ar_chrom10_pos1_sun_td_with_id.txt
"region" "start" "stop" "mid" "G1_TD" "G2_TD" "G3_TD" "G4_TD" "ID_
"45000002 - 45010001 " 45000002 45010001 90.010003 NA NA NA NA chrom10_pos1
"45010002 - 45020001 " 45010002 45020001 90.030003 -1.19087678772119 chrom10_pos1-0.947895467698369 -0.724767209958411 -0.957244005901499 chrom10_pos1
"45020002 - 45030001 " 45020002 45030001 90.050003 NA NA NA NA chrom10_pos1
"45030002 - 45040001 " 45030002 45040001 90.070003 NA NA NA NA chrom10_pos1
我会使用可编写脚本的编辑器和文件名上的 shell 循环来处理它:
这将遍历当前目录中的所有“*.txt”文件并对其进行编辑。循环中的第一行从文件名中提取所需的数据到一个变量中。第二行将三个命令打印到
ed
:1s/$/ "ID"/
-- 更改第 1 行以附加新的列标题2,$s/$/ $value/
(从引用的值简化)- 在文件末尾的第二行,用空格和所需数据替换行尾。wq
-- 将文件写入磁盘并退出