如何通过shellscript更改数据文件中字符串的顺序

时间:2014-10-21 02:52:45

标签: shell

数据保存在< test_id.fileids'它的对齐方式如下所示:

mdlr1/mdlr1-si1299
mdlr1/mdlr1-sa2
mdlr1/mdlr1-si1929
mhxl0/mhxl0-sx242
mhxl0/mhxl0-sa1
fcrz0/fcrz0-si2053
fcrz0/fcrz0-sx343
mgak0/mgak0-sx136
mjjm0/mjjm0-sx107
mjjm0/mjjm0-si1251

...

我怎么能把它们改成?

mdlr1/si1299-mdlr1
mdlr1/sa2-mdlr1
mdlr1/si1929-mdlr1
mhxl0/sx242-mhxl0
mhxl0/sa1-mhxl0
fcrz0/si2053-fcrz0
fcrz0/sx343-fcrz0
mgak0/sx136-mgak0
mjjm0/sx107-mjjm0
mjjm0/si1251-mjjm0

...

2 个答案:

答案 0 :(得分:1)

这是一个例子

echo "mdlr1/mdlr1-si1299" | awk -F'/' '{split($2,tmpArr,"-"); print $1"/" tmpArr[2]"-"tmpArr[1]}'

<强>输出

 mdlr1/si1299-mdlr1

您可以跳过echo ... |并在awk cmd后使用文件名,然后重定向到tmp文件,然后将该tmp文件移回原始文件(或者您可以跳过{{1}并保留文件的新旧版本。)

&& mv ..

IHTH

答案 1 :(得分:0)

Okey享受以下代码:

paste -d / <(awk -F'/' {'print $1'} test_id.fileids )  <(awk  -F'/' {'print  $2'} test_id.fileids |awk -F'-' {'print $2 "-" $1'} )

输出是:

mdlr1/si1299-mdlr1
mdlr1/sa2-mdlr1
mdlr1/si1929-mdlr1
mhxl0/sx242-mhxl0
mhxl0/sa1-mhxl0
fcrz0/si2053-fcrz0
fcrz0/sx343-fcrz0
mgak0/sx136-mgak0
mjjm0/sx107-mjjm0
mjjm0/si1251-mjjm0

然后您可以存储到以下文件:

paste -d / <(awk -F'/' {'print $1'} test_id.fileids )  <(awk  -F'/' {'print  $2'} test_id.fileids |awk -F'-' {'print $2 "-" $1'} ) > output.txt