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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 5850 | 回復: 19
打印 上一主題 下一主題

請教一個替換文本文件中指定位置的值的perl的寫法! [復制鏈接]

論壇徽章:
4
程序設計版塊每日發(fā)帖之星
日期:2015-10-10 06:20:00每日論壇發(fā)貼之星
日期:2015-10-10 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-10-11 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-10-25 06:20:00
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-10-22 13:21 |只看該作者 |倒序瀏覽
請教一個perl的寫法!謝謝!
將input.txt文件中的第2byte的值設定到第11byte,輸出output.txt

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

想要的結果是
$cat output.txt
1F 123456 F qqqqq zzz            
2G 7測012 G qqqqq zzz
3V 1試456 V qqqqq zzz
4H 234567 H qqqqq zzz
90000000

論壇徽章:
307
程序設計版塊每周發(fā)帖之星
日期:2016-04-08 00:41:33操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-09-02 06:20:00每日論壇發(fā)貼之星
日期:2015-09-02 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-04 06:20:00每日論壇發(fā)貼之星
日期:2015-09-04 06:20:00每周論壇發(fā)貼之星
日期:2015-09-06 22:22:00程序設計版塊每日發(fā)帖之星
日期:2015-09-09 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-19 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-20 06:20:00每日論壇發(fā)貼之星
日期:2015-09-20 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-22 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-24 06:20:00
2 [報告]
發(fā)表于 2015-10-22 15:20 |只看該作者
本帖最后由 sunzhiguolu 于 2015-10-22 15:26 編輯

有幾點不太明白, 還請樓主解釋一下:
1.> 主機環(huán)境是什么? (Linux | Windows)
2.> 您的文本中漢字占用幾個字節(jié)? (1 | 2 | 3 | 4)

論壇徽章:
4
程序設計版塊每日發(fā)帖之星
日期:2015-10-10 06:20:00每日論壇發(fā)貼之星
日期:2015-10-10 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-10-11 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-10-25 06:20:00
3 [報告]
發(fā)表于 2015-10-22 15:30 |只看該作者
sunzhiguolu 發(fā)表于 2015-10-22 15:20
有幾點不太明白, 還請樓主解釋一下:
1.> 主機環(huán)境是什么? (Linux | Windows)
2.> 您的文本中漢字占用幾個 ...


你好!
1.主機環(huán)境是Linux
2.文本中漢字占用兩個字節(jié)

論壇徽章:
0
4 [報告]
發(fā)表于 2015-10-22 15:32 |只看該作者



這樣就可以搞定吧~~~

s/(.)(.)(........)(.)(.*)/$1$2$3$2$5/;

論壇徽章:
307
程序設計版塊每周發(fā)帖之星
日期:2016-04-08 00:41:33操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-09-02 06:20:00每日論壇發(fā)貼之星
日期:2015-09-02 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-04 06:20:00每日論壇發(fā)貼之星
日期:2015-09-04 06:20:00每周論壇發(fā)貼之星
日期:2015-09-06 22:22:00程序設計版塊每日發(fā)帖之星
日期:2015-09-09 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-19 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-20 06:20:00每日論壇發(fā)貼之星
日期:2015-09-20 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-22 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-24 06:20:00
5 [報告]
發(fā)表于 2015-10-22 15:38 |只看該作者
本帖最后由 sunzhiguolu 于 2015-10-22 15:57 編輯

回復 3# robinhappiness
確定漢字在文本中占用兩個字節(jié)? 您測試過了嗎? (編碼方式是什么)
能否將測試的結果貼出來?

   

論壇徽章:
4
程序設計版塊每日發(fā)帖之星
日期:2015-10-10 06:20:00每日論壇發(fā)貼之星
日期:2015-10-10 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-10-11 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-10-25 06:20:00
6 [報告]
發(fā)表于 2015-10-22 16:26 |只看該作者
sunzhiguolu 發(fā)表于 2015-10-22 15:38
回復 3# robinhappiness
確定漢字在文本中占用兩個字節(jié)? 您測試過了嗎? (編碼方式是什么)
能否將測試的結 ...


測試了一下您的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í)行結果
1F 123456 F qqqqq zzz              
2G 7測012 TG qqqqq zzz
3V 1試456 TV qqqqq zzz
4H 234567 H qqqqq zzz
90000000


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


----------------
我是這樣實現(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

感覺這個辦法有點兒饒,所以想請教有沒有更好的辦法。

論壇徽章:
307
程序設計版塊每周發(fā)帖之星
日期:2016-04-08 00:41:33操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-09-02 06:20:00每日論壇發(fā)貼之星
日期:2015-09-02 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-04 06:20:00每日論壇發(fā)貼之星
日期:2015-09-04 06:20:00每周論壇發(fā)貼之星
日期:2015-09-06 22:22:00程序設計版塊每日發(fā)帖之星
日期:2015-09-09 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-19 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-20 06:20:00每日論壇發(fā)貼之星
日期:2015-09-20 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-22 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-24 06:20:00
7 [報告]
發(fā)表于 2015-10-22 17:21 |只看該作者
處理漢字的問題我也比較菜鳥, 恐怕讓您失望了.
只有請高手替您解答這個問題了, 我也想知道如何完美解決這個問題的方法. 幫頂!

論壇徽章:
46
15-16賽季CBA聯(lián)賽之四川
日期:2018-03-27 11:59:132015年亞洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49雙魚座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亞冠之布里斯班獅吼
日期:2015-07-13 10:44:56
8 [報告]
發(fā)表于 2015-10-22 22:12 |只看該作者
應為有 90000000 這種不需要替換的行,所以單純的 substr 不行。

use bytes;  #他能保證匹配是按字節(jié)來的,無需考慮中文字符的問題。這里沒必要加就是個保險
while (<>) {
    s/^(.(.) .{6} )./$1$2/; # 有兩個空格,用來區(qū)分格式,避開 9000000 這樣的行
    print $_;
}

論壇徽章:
95
程序設計版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設計版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設計版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
9 [報告]
發(fā)表于 2015-10-22 22:37 |只看該作者
回復 1# robinhappiness


    直接按域處理么,數(shù)什么字節(jié)。

#!/usr/bin/perl

use strict;
use warnings;

use v5.14;

while (<DATA>) {
  chomp;
  my @f = split;
  say and next unless @f > 1;

  $f[2] = (split //, $f[0])[1];
  say join " ", @f;
}

__DATA__
1F 123456 T qqqqq zzz
2G 7測012 T qqqqq zzz
3V 1試456 T qqqqq zzz
4H 234567 T qqqqq zzz
90000000

論壇徽章:
307
程序設計版塊每周發(fā)帖之星
日期:2016-04-08 00:41:33操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-09-02 06:20:00每日論壇發(fā)貼之星
日期:2015-09-02 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-04 06:20:00每日論壇發(fā)貼之星
日期:2015-09-04 06:20:00每周論壇發(fā)貼之星
日期:2015-09-06 22:22:00程序設計版塊每日發(fā)帖之星
日期:2015-09-09 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-19 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-20 06:20:00每日論壇發(fā)貼之星
日期:2015-09-20 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-22 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-24 06:20:00
10 [報告]
發(fā)表于 2015-10-23 09:02 |只看該作者
本帖最后由 sunzhiguolu 于 2015-10-23 09:22 編輯

回復 8# zhlong8
大神您好, 在 Linux 環(huán)境下如何確保中文字符按照 個字節(jié)進行處理.
測試環(huán)境:linux
測試文本:
1.> 編碼方式: utf-8
2.> 使用桌面環(huán)境, 右鍵創(chuàng)建空文檔的方式創(chuàng)建的測試文件 input.txt

本地語言環(huán)境:
  1. LANG=zh_CN.UTF-8
  2. LC_CTYPE="zh_CN.UTF-8"
  3. LC_NUMERIC="zh_CN.UTF-8"
  4. LC_TIME="zh_CN.UTF-8"
  5. LC_COLLATE="zh_CN.UTF-8"
  6. LC_MONETARY="zh_CN.UTF-8"
  7. LC_MESSAGES="zh_CN.UTF-8"
  8. LC_PAPER="zh_CN.UTF-8"
  9. LC_NAME="zh_CN.UTF-8"
  10. LC_ADDRESS="zh_CN.UTF-8"
  11. LC_TELEPHONE="zh_CN.UTF-8"
  12. LC_MEASUREMENT="zh_CN.UTF-8"
  13. LC_IDENTIFICATION="zh_CN.UTF-8"
  14. LC_ALL=
復制代碼
測試代碼如下: (只抓取前 10 個字符)

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use bytes;

  4. while (<>){
  5.    if (m{(.{10})}){
  6.        my $leng = length ($1);
  7.        printf "Length = %d, |%s|\n", $leng, $1;
  8.        my @a_10c = split //, $1;
  9.        foreach (@a_10c){
  10.           printf "<%s>=%d ", $_, length ($_);
  11.        }
  12.        print "\n";
  13.     }
  14. }
復制代碼
輸出結果如下:

  1. Length = 10, |1F 123456 |
  2. <1>=1 <F>=1 < >=1 <1>=1 <2>=1 <3>=1 <4>=1 <5>=1 <6>=1 < >=1
  3. Length = 10, |2G 7測012|
  4. <2>=1 <G>=1 < >=1 <7>=1 <?>=1 <?>=1 <?>=1 <0>=1 <1>=1 <2>=1
  5. Length = 10, |3V 1試456|
  6. <3>=1 <V>=1 < >=1 <1>=1 <?>=1 <?>=1 <?>=1 <4>=1 <5>=1 <6>=1
  7. Length = 10, |4H 234567 |
  8. <4>=1 <H>=1 < >=1 <2>=1 <3>=1 <4>=1 <5>=1 <6>=1 <7>=1 < >=1
復制代碼
輸出結果中連續(xù)的 3 個 ? (問號字符) 表示一個漢字字符, 每個漢字部分占用 3 個字節(jié)長度.

   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP