2015-12-11 26 views
0

* Unix的我如何削减这些列以实现此目的?

我试图改变该文件包含:

abc.123?zyx 

我试图改变它,使之像这样:

123 ZYX abc 

我使用的命令:

cut -f1 -d "." $data > first 

cut -f2 -d "?" $data > second 

但是,当我似乎无法将最后一列复制到一个新的fi乐。 我也想知道如何利用我试图复制的最后一列。

回答

4

我觉得'tr'(translate)会更适合第一部分。 对于前:

$> echo "abc.123?zyx" | tr '[.?:]' ' ' 
abc 123 zyx 

现在所得到的字符串上的最后一列转换,您可以使用AWK:

$> echo "abc 123 zyx" | awk '{print $1 " " $2 " " toupper($3) }' 
abc 123 ZYX 

所以作为一个整体以下应为你工作:

$> cat <file> | tr '[.?:]' ' ' | awk '{print $1 " " $2 " " toupper($3) }' 
+0

在最终答案中有一个小的更正:'tr'[。?:'''< | awk'{print $ 1''$ 2“'toupper($ 3)}'' – learningloop

+0

感谢您的纠正。我假定文件上有作品。 –

+0

'echo abc.123?zyx | awk'{print $ 2,toupper($ 3),$ 1}'FS ='[。?]'' –

0

无法评论@Ajay Kumar的回答。我正准备按照@learningloop所述编写更正tr '[.?:]' ' ' < <file>

也小更新用,因为OP需要串123 ZYX ABC,改变了答案:

tr '[.?:]' ' ' < <file> | awk '{print $1 " " toupper($3) " " $2 }'

0

以下为sed基础的解决方案,如果要求更改文件内嵌:

sed -i 's/\(.*\)\.\(.*\)?\(.*\)/\2 \U\3 \L\1/g' <file>