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

Awk 将单词移动到多行中的不同列,awk,sed,Awk,Sed,我有一堆线条,看起来像: some_command -arg1 -arg2 ITEM -arg3 我需要将项目移动到某个命令之后 该文件确实有注释等。因此,我只需要在以some_命令开始的行上执行上述操作 有近1000行这样的代码,我无法想象手动操作。即使使用块视觉模式也会很棘手,因为实际上没有对齐 我想awk将是我在这里的朋友。ITEM的位置是固定的,所以我知道列号。但是我如何告诉awk打印$1,然后打印$6,然后打印$2到$NF的所有其他列,除了$6?也只能在以某些命令开始的行上执行此操作

我有一堆线条,看起来像:

some_command -arg1 -arg2 ITEM -arg3
我需要将
项目
移动到
某个命令之后

该文件确实有注释等。因此,我只需要在以
some_命令开始的行上执行上述操作

有近1000行这样的代码,我无法想象手动操作。即使使用块视觉模式也会很棘手,因为实际上没有对齐

我想
awk
将是我在这里的朋友。
ITEM
的位置是固定的,所以我知道列号。但是我如何告诉
awk
打印
$1
,然后打印
$6
,然后打印
$2
$NF
的所有其他列,除了
$6
?也只能在以
某些命令开始的行上执行此操作。

@shikhanshu:尝试:

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

sed版本

sed -e '/^[[:blank:]]*#/b' -e 's/\(some_command\)\(.*\)[[:blank:]]\([^-][^[:blank:]]\{1,\}\)/\1 \3\2/' YourFile
假设您的商品不是像您的示例中那样以
-
开头(更简单),如果不是空格,则需要更多的代码

awk版本

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

awk'/^some_command/{$1=$1”“$4;$4=“”;}1'
@williampersell:谢谢你的好代码,如果我把$4设为NULL,可能会导致空格问题,尽管根本没有测试过。@williampersell我知道你在那里做了什么!你真聪明!很好用。。你说得对,它增加了一个额外的空间;但这对我来说不是问题。@shikhanshu:希望我的解决方案也能帮助你:)谢谢!这也行得通。将
/.*/
替换为
而不是仅仅将
$(NF-1)
设置为
,有什么好处吗?@shikhanshu:正如我前面提到的,你是对的,这就是保持空间不变,不要弄乱它们。此外,$(NF-1)将我们保存为硬编码任何字段的值,因此每次让字段数为任意值,如果您始终需要倒数第二个字段,那么它应该会飞起来。我希望这对你有帮助。不断学习,不断提问/分享:)
awk '/^[[:blank:]]*some_command/ {t=$4; $4=$3; $3=$2; $2=t}7' YourFile