亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 請教:文本中的指定列值替換的shell命令寫法 [打印本頁]

作者: robinhappiness    時間: 2015-10-21 16:12
標題: 請教:文本中的指定列值替換的shell命令寫法
$cat target.txt
1F 123456 P              
2G 789012 A
3V 123456 E
4H 234567 K

想要把target.txt中第2byte的列的值替換到第11byte的列的值

替換后結(jié)果如下:
$cat target.txt
1F 123456 F              
2G 789012 G
3V 123456 V
4H 234567 H

請教怎樣實現(xiàn)!謝謝!
作者: 我愛你我的菜    時間: 2015-10-21 16:19
awk -vFS='' -vOFS='' '{$11=$2}1' test.txt
作者: reyleon    時間: 2015-10-21 16:20
  1. awk -F '' -vOFS='' '$11=$2' file
復(fù)制代碼

作者: haooooaaa    時間: 2015-10-21 16:24
  1. awk '$NF=substr($1,2)' b
  2. 1F 123456 F
  3. 2G 789012 G
  4. 3V 123456 V
  5. 4H 234567 H
復(fù)制代碼

作者: yjh777    時間: 2015-10-21 16:28
sed 版本 (我好無聊啊)
  sed -r 's/^(.)(.)(.{8})(.)(.*)$/\1\2\3\2\5/'  t.txt
作者: robinhappiness    時間: 2015-10-21 16:41
回復(fù) 2# 我愛你我的菜


    謝謝!
作者: robinhappiness    時間: 2015-10-21 16:42
謝謝大家
作者: robinhappiness    時間: 2015-10-22 10:45
reyleon 發(fā)表于 2015-10-21 16:20


謝謝!
請教如何解決這個問題,做了一個測試數(shù)據(jù)。
shell執(zhí)行前
$cat target.txt
1F 123456 T              
2G 7測012 T
3V 1試456 T
4H 234567 T
90000000

shell執(zhí)行后結(jié)果如下,并且輸出結(jié)果的文件的最后一行不見了。
$cat target.txt
1F 123456 F              
2G 7測012 TG
3V 1試456 TV
4H 234567 H

想要的結(jié)果是
1F 123456 F              
2G 7測012 G
3V 1試456 V
4H 234567 H
90000000


作者: reyleon    時間: 2015-10-22 10:55
回復(fù) 8# robinhappiness


    awk 'NF>1 {$NF=substr($1,2)}1' file
作者: robinhappiness    時間: 2015-10-22 10:56
haooooaaa 發(fā)表于 2015-10-21 16:24


謝謝!請教
shell執(zhí)行前
$cat target.txt
1F 123456 T              
2G 7測012 T
3V 1試456 T
4H 234567 T
90000000

shell執(zhí)行后結(jié)果如下,輸出結(jié)果的文件的最后一行的第一byte的9不見了。
$cat target.txt
1F 123456 F              
2G 7測012 G
3V 1試456 V
4H 234567H
0000000

想要的結(jié)果是
1F 123456 F              
2G 7測012 G
3V 1試456 V
4H 234567 H
90000000

另外,請教,如果我想將文件中第2byte位置的值,替換到2000byte位置的話,這個命令應(yīng)該怎樣改?謝謝!
作者: robinhappiness    時間: 2015-10-22 11:01
reyleon 發(fā)表于 2015-10-22 10:55
回復(fù) 8# robinhappiness


謝謝,另外請教一下
如果我想把第2byte位置的值設(shè)定到第2000byte的位置的話,應(yīng)該怎樣改這個命令?
作者: robinhappiness    時間: 2015-10-22 11:31
reyleon 發(fā)表于 2015-10-22 10:55
回復(fù) 8# robinhappiness

謝謝!我請教的意思是這樣的
處理對象文件內(nèi)容
$cat target.txt
1F 123456 T qqqqq zzz              
2G 7測012 T qqqqq zzz
3V 1試456 T qqqqq zzz
4H 234567 T qqqqq zzz
90000000

實際執(zhí)行結(jié)果
1F 123456 T qqqqq F              
2G 7測012 T qqqqq G
3V 1試456 T qqqqq V
4H 234567 T qqqqq H
90000000


想要的結(jié)果是
1F 123456 F qqqqq zzz            
2G 7測012 G qqqqq zzz
3V 1試456 V qqqqq zzz
4H 234567 H qqqqq zzz
90000000


作者: robinhappiness    時間: 2015-10-22 12:51
yjh777 發(fā)表于 2015-10-21 16:28
sed 版本 (我好無聊啊)
  sed -r 's/^(.)(.)(.{8})(.)(.*)$/\1\2\3\2\5/'  t.txt


謝謝了!測試了一下您的sed命令,請教一個問題。

處理對象文件內(nèi)容
$cat target.txt
1F 123456 T qqqqq zzz              
2G 7測012 T qqqqq zzz
3V 1試456 T qqqqq zzz
4H 234567 T qqqqq zzz
90000000

實際執(zhí)行結(jié)果
1F 123456 F qqqqq zzz              
2G 7測012 TG qqqqq zzz
3V 1試456 TV qqqqq zzz
4H 234567 H qqqqq zzz
90000000


想要的結(jié)果是
1F 123456 F qqqqq zzz            
2G 7測012 G qqqqq zzz
3V 1試456 V qqqqq zzz
4H 234567 H qqqqq zzz
90000000


作者: reyleon    時間: 2015-10-22 13:21
回復(fù) 12# robinhappiness


    你這個有問題啊

你到底是要根據(jù) 字節(jié) 進行替換 , 還是要根據(jù) 字符進行替換啊?

要是第 11 個字節(jié)恰好是個中文字, 一個中文占兩個字節(jié), 難不成你還要把中文根據(jù)字節(jié)拆開進行替換么?




作者: robinhappiness    時間: 2015-10-22 13:24
回復(fù) 14# reyleon


    第11個字節(jié)的位置肯定不會出現(xiàn)漢字,也不會出現(xiàn)占兩個字節(jié)的字符的情況。
作者: nxlinux    時間: 2015-10-22 14:16
學(xué)習(xí)啦,各種思路,呵呵
作者: nxlinux    時間: 2015-10-22 14:16
學(xué)習(xí)啦,各種思路,呵呵
作者: robinhappiness    時間: 2015-10-22 15:38
我是這樣實現(xiàn)的。
cut原文件的第2列,aaa.txt
然后再cut原文件的1到10列,bbb.txt
然后再cut原文件的12列以后,ccc.txt

然后取消aaa.txt bbb.txt 換行之后合并cat bbb.txt aaa.txt ccc.txt > output.txt

感覺這個辦法有點兒饒,所以想請教有沒有更好的辦法。
作者: yjh777    時間: 2015-10-22 18:08
robinhappiness 發(fā)表于 2015-10-22 12:51
謝謝了!測試了一下您的sed命令,請教一個問題。

處理對象文件內(nèi)容


這個原因是utf8編碼中,字符占位寬度不確定,其實你給的文本中的漢字占三個字節(jié):
[yjh@dhcp-12-151 bkr-client-improved]$ cat t.txt
1F 123456 T qqqqq zzz              
2G 7測012 T qqqqq zzz
3V 1試456 T qqqqq zzz
4H 234567 T qqqqq zzz
[yjh@dhcp-12-151 bkr-client-improved]$ while read l; do echo "$l" | wc -c; done <t.txt
22
23
23
22

作者: yjh777    時間: 2015-10-22 18:14
robinhappiness 發(fā)表于 2015-10-22 15:38
我是這樣實現(xiàn)的。
cut原文件的第2列,aaa.txt
然后再cut原文件的1到10列,bbb.txt


[yjh@dhcp-12-151 bkr-client-improved]$ awk '{$3=substr($1,2); print}' t.txt
1F 123456 F qqqqq zzz
2G 7測012 G qqqqq zzz
3V 1試456 V qqqqq zzz
4H 234567 H qqqqq zzz

作者: yjh777    時間: 2015-10-22 18:16
一樓沒有漢字例子,也沒有問題:
[yjh@dhcp-12-151 bkr-client-improved]$ awk '{$3=substr($1,2); print}' target.txt
1F 123456 F
2G 789012 G
3V 123456 V
4H 234567 H
作者: yjh777    時間: 2015-10-22 18:22
本帖最后由 yjh777 于 2015-10-22 18:22 編輯

# 總結(jié):
  漢字在屏幕上顯示占用了兩個字母像素的寬度,但實際根據(jù)字符編碼方式的不同占用幾個字節(jié)不確定;
  1. [yjh@dhcp-12-151 bkr-client-improved]$ grep 2G tt.txt
  2. 2G 7測012 G qqqqq zzz
  3. [yjh@dhcp-12-151 bkr-client-improved]$ grep 2G tt.txt | hexdump -C
  4. 00000000  32 47 20 37 e6 b5 8b 30  31 32 20 47 20 71 71 71  |2G 7...012 G qqq|
  5. 00000010  71 71 20 7a 7a 7a 0a                              |qq zzz.|
  6. 00000017
復(fù)制代碼

作者: robinhappiness    時間: 2015-10-22 21:42
回復(fù) 21# yjh777

非常感謝熱心解答!
現(xiàn)在要編集的對象文件出現(xiàn)一種新的情況,就是要被替換的列沒有值,為空的情況下,
比如第11byte的列值為空,最終想要把第二列的值設(shè)定到第11個byte所在的列,請教高手幫忙指點。

對象文件是
$cat org.txt
1000000
1F 123456   qqqqq zzz
2G 7測012   qqqqq zzz
3V 1試456   qqqqq zzz
4H 234567   qqqqq zzz
9000000

想要得到的結(jié)果是
$cat output.txt
1000000
1F 123456 F qqqqq zzz
2G 7測012 G qqqqq zzz
3V 1試456 V qqqqq zzz
4H 234567 H qqqqq zzz
9000000
作者: yjh777    時間: 2015-10-22 23:51
回復(fù) 23# robinhappiness


自己沒有一點思路嗎?
  1. [yjh@dhcp-12-151 ~]$ awk '{if (NF > 1) {$2=$2 " " substr($1,2);} print}'  t.txt
  2. 1000000
  3. 1F 123456 F qqqqq zzz
  4. 2G 7測012 G qqqqq zzz
  5. 3V 1試456 V qqqqq zzz
  6. 4H 234567 H qqqqq zzz
  7. 9000000
復(fù)制代碼

作者: robinhappiness    時間: 2015-10-23 09:21
回復(fù) 24# yjh777

非常感謝!
我之前做的測試數(shù)據(jù)比較規(guī)范,實際上要處理的對象文件里面包含有全角和半角的空格、漢字、數(shù)字、符號等都有,
而且每個字段的劃分也沒規(guī)律,打個比方我要把第2byte的數(shù)值插入到第25byte的位置(zz0和yyy之間),
第1和第2byte位置的值肯定只占一個字節(jié),還有第25byte的位置肯定為只站一個字節(jié)的半角空格。
字段的布局沒有規(guī)律!

對象文件
$cat input.txt
1000000
1F 123456 ー  qqq q zz0 yyy  
2G 7測012 --  q qq  zz0 yyy
3V 1試456     qq  qq zz0 yyy
4H 234567    qqq  q zz0 yyy
09000000

想要的輸出結(jié)果
$cat output.txt
1000000
1F 123456 ー  qqq q zz0Fyyy  
2G 7測012 --  q qq  zz0Gyyy
3V 1試456     qq  qq zz0Vyyy
4H 234567    qqq  q zz0Hyyy
09000000
作者: yjh777    時間: 2015-10-23 10:08
回復(fù) 25# robinhappiness

你自己把需求搞清楚再問吧。
看你自己描述一直改,又說沒規(guī)律,,找不出規(guī)律就沒有辦法用程序解決

你先把規(guī)律找出來,或者把“真實”的數(shù)據(jù)發(fā)出來,讓大家?guī)湍阏乙?guī)律

還有:你確定你現(xiàn)在知道怎么看你文件里的漢字占幾個字節(jié)嗎?
作者: robinhappiness    時間: 2015-10-23 11:41
回復(fù) 26# yjh777


不好意思,麻煩您了!

真實數(shù)據(jù)如下
$cat input.txt

1seaw203202023 0                                                                                                                ↓
2HT0230  H12322上海/號? 20150115/T23213上海      X xカxX      0  000000000000000     ↓
2HM2484  H34231北京/號? 20150115/T25613北京1    Xカxx。亍。  0  000000000000000     ↓
3HT1973  H21311西安/號? 20150115/T66213西安12  XxカX         0  000000000000000     ↓
90000009                                                                                                                              ↓

想要的結(jié)果是,把input.txt的第2列插入到0列的后面,0列位置固定在同一個字節(jié)的位置。
$cat output

1seaw203202023 0                                                                                                                ↓
2HT0230  H12322上海/號? 20150115/T23213上海      X xカxX      0H 000000000000000     ↓
2HM2484  H34231北京/號? 20150115/T25613北京1    Xカxx。亍。  0H 000000000000000     ↓
3HT1973  H21311西安/號? 20150115/T66213西安12  XxカX         0H 000000000000000     ↓
90000009                                                                                                                               ↓
作者: yjh777    時間: 2015-10-23 11:53
回復(fù) 27# robinhappiness

[yjh@dhcp-12-107 ~]$ cat t.txt
1seaw203202023 0                                                                                                                ↓
2HT0230  H12322上海/號? 20150115/T23213上海      X xカxX      0  000000000000000     ↓
2HM2484  H34231北京/號? 20150115/T25613北京1    Xカxx。亍。  0  000000000000000     ↓
3HT1973  H21311西安/號? 20150115/T66213西安12  XxカX         0  000000000000000     ↓
90000009
[yjh@dhcp-12-107 ~]$ awk '{if (NF > 2) {$(NF-2)=$(NF-2) substr($1,2,1);} print}'  t.txt
1seaw203202023s 0 ↓
2HT0230 H12322上海/號? 20150115/T23213上海 X xカxX 0H 000000000000000 ↓
2HM2484 H34231北京/號? 20150115/T25613北京1 Xカxx X。 0H 000000000000000 ↓
3HT1973 H21311西安/號? 20150115/T66213西安12 XxカX 0H 000000000000000 ↓
90000009

作者: robinhappiness    時間: 2015-10-23 12:43
yjh777 發(fā)表于 2015-10-23 11:53
回復(fù) 27# robinhappiness

[yjh@dhcp-12-107 ~]$ cat t.txt


謝謝!
能麻煩您把您的email地址站內(nèi)短消息發(fā)給我嗎?我把命令跑出的結(jié)果發(fā)給您看一下!




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2