将单词移动到多行中的不同列

时间:2017-02-13 19:33:48

标签: awk sed

我有一堆看起来像这样的行:

pword

我需要在get_terms()

之后立即移动$cats = get_terms('category', array( 'fields' => 'ids', 'exclude' => '1', 'hide_empty' => false, ));

该文件确实有评论等。所以我只需要在以some_command -arg1 -arg2 ITEM -arg3 开头的行上进行上述操作。

有近1000条此类线条,我无法手动对其进行图像处理。即使使用块视觉模式也会很棘手,因为实际上没有对齐。

我在想ITEM将成为我的朋友。some_command的位置是固定的,所以我知道列号。但是,除了some_command之外,我如何告诉awk打印ITEM然后awk以及$1$6之外的所有其他列?并且只在以$2开头的行上执行此操作?

2 个答案:

答案 0 :(得分:1)

@shikhanshu:试试:

awk '/some_command/{$2="ITEM" FS $2;sub(/.*/,"",$(NF-1))} 1'   Input_file

OR

awk '/some_command/{$2=$(NF-1) FS $2;sub(/.*/,"",$(NF-1))} 1'   Input_file

答案 1 :(得分:0)

一个sed版本

sed -e '/^[[:blank:]]*#/b' -e 's/\(some_command\)\(.*\)[[:blank:]]\([^-][^[:blank:]]\{1,\}\)/\1 \3\2/' YourFile

假设您的商品不是以yuour样本中的-开头(更简单),如果不是空格是分隔符并需要更多代码

awk版

awk '/^[[:blank:]]*some_command/ {t=$4; $4=$3; $3=$2; $2=t}7' YourFile