Chinaunix
标题:
用sed或awk如何实现
[打印本页]
作者:
xiaoshichao143
时间:
2015-04-14 14:42
标题:
用sed或awk如何实现
------------------------------------------------
sLanguage|sServiceID|nSPID|nServiceCode|sMemo|sLangTypeAbbr|sUsed|nSMSCodeSchema|sNBLangID
------------------------------------------------
142|-1|-1|1|Chinese|cn|1|1|01
01|-1|-1|1|Memo|CN|1|2|2
02|-1|-1|1|Memo|CN|1|2|2
143|-1|-1|1|Language type memo|chi|1|1|06
144|-1|-1|1|Language type memo|eng|1|1|06
145|-1|-1|1|Language type memo|spa|1|1|06
复制代码
上面的内容,如何用sed或awk,使输出为:
sLanguage 142
sLanguage 01
sLanguage 02
sLanguage 143
sLanguage 144
sLanguage 145
复制代码
作者:
zsszss0000
时间:
2015-04-14 14:50
本帖最后由 zsszss0000 于 2015-04-14 14:50 编辑
awk -vFS="|" '!/^-/{print $1}' file | awk 'NR==1{a=$0;next}{printf a":"$1"\n"}'
复制代码
sLanguage:142
sLanguage:01
sLanguage:02
sLanguage:143
sLanguage:144
sLanguage:145
复制代码
作者:
zxy877298415
时间:
2015-04-14 15:07
awk -F\| '/^[^-]/{if(NR==3) {t=$1} else {print t,$1}}' file
复制代码
回复
1#
xiaoshichao143
作者:
zsszss0000
时间:
2015-04-14 15:13
NR==2
回复
3#
zxy877298415
作者:
zxy877298415
时间:
2015-04-14 15:22
回复
4#
zsszss0000
横线下面有空行!
作者:
undead244
时间:
2015-04-14 15:48
方法很笨。。。
awk -F "|" '{if(NR==2){head=$1}else if(NR>3){print head" "$1}}' filename
作者:
stupid_lee
时间:
2015-04-14 15:50
本帖最后由 stupid_lee 于 2015-04-14 18:01 编辑
[root@oracle ~]# awk -F"|" 'NR==2{a=$1;next}NR>3{print a" "$1}' ss.txt
sLanguage 142
sLanguage 01
sLanguage 02
sLanguage 143
sLanguage 144
sLanguage 145
复制代码
想要写个sed真的好难,写完再看看羊神为啥这么短
sed '/^[^-]/{2{s/^([^|]*)\|(.*)/\1/g;h};4,${s/^([^|]*)\|(.*)/\1/g;G;s/(.*)\n(.*)/\2 \1/g;p}}' -nr
复制代码
作者:
我是一隻羊
时间:
2015-04-14 15:51
本帖最后由 我是一隻羊 于 2015-04-14 16:14 编辑
来个sed版...
sed -r '/---/{N;N;s/-+\n|\|.*//g;h;d};G;s/([^|]+).*\n(.*)/\2 \1/' inputfile
复制代码
补一个awk版
awk -F\| -vf=1 'NR==2{split($0,a,"|")}NR>3{print a[f],$f}' inputfile
复制代码
f那里定义你要取的域.
作者:
xiaoshichao143
时间:
2015-04-14 16:34
回复
2#
zsszss0000
多谢大家的热心解答,就不一一答谢了。多谢!!
作者:
xiaoshichao143
时间:
2015-04-14 16:39
<1365 szxciscslx23114 [bmp] :/home/bmp/xiaoshichao>set ModuleName="CommTableSOAP"
<1366 szxciscslx23114 [bmp] :/home/bmp/xiaoshichao>set TableName="R_CommTable_Language"
<1367 szxciscslx23114 [bmp] :/home/bmp/xiaoshichao>
<1367 szxciscslx23114 [bmp] :/home/bmp/xiaoshichao>set ModuleInfo=`awk -F'|' -v module="$ModuleName" '$1 == module{print "-neid "$3" -netElementType "$4" -moduleName "$1" -version "$2}' ${ENIP_HOME}/app/modules/moduleversion.txt`
<1368 szxciscslx23114 [bmp] :/home/bmp/xiaoshichao>awk -v moduleInfo="$ModuleInfo" -v table="$TableName" 'BEGIN{print "etool -c \"moduleadm propertyManagement -queryTable "moduleInfo" -tableName "table"\""}' | sh
------------------------------------------------
sLanguage|sServiceID|nSPID|nServiceCode|sMemo|sLangTypeAbbr|sUsed|nSMSCodeSchema|sNBLangID
------------------------------------------------
142|-1|-1|1|Chinese|cn|1|1|01
01|-1|-1|1|Memo|CN|1|2|2
02|-1|-1|1|Memo|CN|1|2|2
143|-1|-1|1|Language type memo|chi|1|1|06
144|-1|-1|1|Language type memo|eng|1|1|06
145|-1|-1|1|Language type memo|spa|1|1|06
<1369 szxciscslx23114 [bmp] :/home/bmp/xiaoshichao>awk -v moduleInfo="$ModuleInfo" -v table="$TableName" 'BEGIN{print "etool -c \"moduleadm propertyManagement -queryTable "moduleInfo" -tableName "table"\""}' | sh | sed -r '/---/{N;N;s/-+\n|\|.*//g;h;d};G;s/([^|]+).*\n(.*)/\2 \1/'
sLanguage 142
sLanguage 01
sLanguage 02
sLanguage 143
sLanguage 144
sLanguage 145
sLanguage
<1370 szxciscslx23114 [bmp] :/home/bmp/xiaoshichao>
复制代码
回复
8#
我是一隻羊
sed的如果有空行的话,会有一点小问题。
作者:
我是一隻羊
时间:
2015-04-14 16:43
回复
10#
xiaoshichao143
你们都不贴原文本....贴出来的部分也不具有代表性....字符处理这么精确的事情当然结果会有偏差...
作者:
lifayi2008
时间:
2015-04-14 17:10
test@ubuntu-test:~/test$ cat test.txt
------------------------------------------------
sLanguage|sServiceID|nSPID|nServiceCode|sMemo|sLangTypeAbbr|sUsed|nSMSCodeSchema|sNBLangID
------------------------------------------------
142|-1|-1|1|Chinese|cn|1|1|01
01|-1|-1|1|Memo|CN|1|2|2
02|-1|-1|1|Memo|CN|1|2|2
143|-1|-1|1|Language type memo|chi|1|1|06
144|-1|-1|1|Language type memo|eng|1|1|06
145|-1|-1|1|Language type memo|spa|1|1|06
test@ubuntu-test:~/test$ awk -F"|" '!/^-*$/{if(a){print a,$1;next}{a=$1}}' test.txt
sLanguage 142
sLanguage 01
sLanguage 02
sLanguage 143
sLanguage 144
sLanguage 145
复制代码
作者:
jcdiy0601
时间:
2015-04-18 17:38
本帖最后由 jcdiy0601 于 2015-04-18 17:39 编辑
awk -F"|" '{if($1~/sLanguage/) name=$1;if($1~/[0-9]/)print name,$1}' 1
复制代码
作者:
liion631818
时间:
2015-04-18 19:04
lee@lee-HP-ProBook-4416s:~$ echo '------------------------------------------------
sLanguage|sServiceID|nSPID|nServiceCode|sMemo|sLangTypeAbbr|sUsed|nSMSCodeSchema|sNBLangID
------------------------------------------------
142|-1|-1|1|Chinese|cn|1|1|01
01|-1|-1|1|Memo|CN|1|2|2
02|-1|-1|1|Memo|CN|1|2|2
143|-1|-1|1|Language type memo|chi|1|1|06
144|-1|-1|1|Language type memo|eng|1|1|06
145|-1|-1|1|Language type memo|spa|1|1|06' | awk -F '\|' '/sLanguage/{for(i=0; i<NF;i++)if($i=="sLanguage")col=i;next}NF>1{print "sLanguage " $col}'
sLanguage 142
sLanguage 01
sLanguage 02
sLanguage 143
sLanguage 144
sLanguage 145
复制代码
回复
1#
xiaoshichao143
作者:
sky_eminem
时间:
2015-04-19 21:16
awk 'BEGIN{FS="|";NR=4}{print "sLanguage " $1}' a.txt
作者:
xiaoshichao143
时间:
2015-04-27 11:26
回复
15#
sky_eminem
这个不通用,只适用于当前表。
作者:
dengwei29
时间:
2015-05-08 11:12
sed -r '/[a-z]/!d;s!([^|]+).*!\1!;/[a-z]/{h;d};G;s!(.*)\n(.*)!\2: \1!' file
复制代码
作者:
klainogn
时间:
2015-05-08 13:49
sed -rn 's/\|.*$//;ta;d;:a;/^[0-9]/{G;s/(.*)\n(.*)/\2 \1/;p;d};h' urfile
复制代码
作者:
zl624867243
时间:
2015-05-10 19:34
其他人解决方式我就没看了先写上我的
#!/bin/bash
a=`awk -F '|' '{print $1}' file | tail -6 > 1.txt`
for i in `cat 1.txt`
do
echo "sLanguage" $i
done
rm -rf 1.txt
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2