我有2个文件file_A和file_B。文件file_A包含文件名,然后在空格后包含代码行。 此代码行可以有随机类型的字符说空白,等等。它看起来像这样。请注意,文件中的代码行未被()包围。这仅用于说明目的。
bash $ cat file_A
file_name1 (code line a)
file_name1 (code line b)
file_name2 (code line c)
file_name2 (code line d)
file_name2 (code line e)
文件file_B包含file_name以及file_A
中的频率bash $ cat file_B
file_name1 2
file_name2 3
我希望输出为:(frequency,file_name,code_line)
2 file_name1 (code line a)
2 file_name1 (code line b)
3 file_name2 (code line c)
3 file_name2 (code line d)
3 file_name2 (code line e)
bash $ join -1 1 -2 1 file_B file_A> FILE_C
我将file_C作为(我将连接字段作为第一个字段)
file_name1 2 (code line a)
file_name1 2 (code line b)
file_name2 3 (code line c)
file_name2 3 (code line d)
file_name2 3 (code line e)
如何在第一个字段中获取频率字段?
我知道通过join我可以使用-o格式并在输出中提到我想要的字段和顺序。但是我怎么说把所有这些放在代码行中(可以包含任何内容,所以没有这样的分隔符)
谢谢,
答案 0 :(得分:3)
join file_B file_A | awk '{t=$1; $1=$2; $2=t; print}' > file_C
答案 1 :(得分:1)
注意join不支持在输出格式中指定一系列字段,因此以下内容有点hacky,但在“代码行”中最多支持8个空格
join -o 1.2,0,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9 file_B file_A
答案 2 :(得分:0)
sed 's#([^ ]*) ([^ ]*) (.*)#$2 $1 $3#g'
注意:也许您必须使用退格键逃避常规括号才能使其正常工作。