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

Chinaunix

標(biāo)題: 求助:文本內(nèi)容指定位置換行 [打印本頁]

作者: robinhappiness    時間: 2015-10-07 09:32
標(biāo)題: 求助:文本內(nèi)容指定位置換行
test.txt文件中的內(nèi)容沒有換行,想要把test.txt文件內(nèi)容的每9位換一次行,得到new.txt文件。請問這個shell 命令應(yīng)該怎樣寫,謝謝!

$cat test.txt
123456789987654321777777777999999999ddd

$cat new.txt
123456789
987654321
777777777
999999999
ddd
作者: tc1989tc    時間: 2015-10-07 09:41
  1. sed 's/\([a-zA-Z0-9]\{9,9\}\)/\1\n/g' file
復(fù)制代碼

作者: Herowinter    時間: 2015-10-07 10:03
本帖最后由 Herowinter 于 2015-10-07 10:03 編輯

回復(fù) 1# robinhappiness

  1. grep -o ".\{1,9\}" test.txt
  2. 123456789
  3. 987654321
  4. 777777777
  5. 999999999
  6. ddd
復(fù)制代碼

作者: robinhappiness    時間: 2015-10-07 10:24
回復(fù) 2# tc1989tc

謝謝!執(zhí)行了一下您的命令,如果是數(shù)字和字母,可以正確的每9 byte換行。但是如果文件中有文字的話,好像不能正常換行,比如!
想要按照byte為單位,每9個byte換行,如果第9個byte和第10個byte之間出現(xiàn)漢字的話,需要把漢字分割兩半,第9byte顯示一半漢字,換行之后第一byte顯示另一半漢字!謝謝!

$cat test.txt
123456789987654321777777777999999999ddd---漢字----wqejq23pjrqiaerfpqbbbbb

執(zhí)行之后結(jié)果:

$cat new.txt
123456789
987654321
777777777
999999999
ddd---漢字-
---wqejq2
3pjrqiaer
fpqbbbbb

作者: robinhappiness    時間: 2015-10-07 10:27
回復(fù) 3# Herowinter


    謝謝回復(fù)!如果文件中有漢字的情況下,漢字出現(xiàn)在第9和第10個Byte的位置,怎樣能將漢字分割?第9byte顯示漢字左半部分,換行之后第一byte顯示漢字右半部分!謝謝!
作者: Herowinter    時間: 2015-10-07 11:04
本帖最后由 Herowinter 于 2015-10-07 11:20 編輯

回復(fù) 5# robinhappiness

你需要的結(jié)果不是這個的話?

123456789
987654321
777777777
999999999
ddd---漢字-
---wqejq2
3pjrqiaer
fpqbbbbb

那是什么?

2個byte表示1個漢字,你要拆分成1個1個byte,你想要怎么顯示結(jié)果呢?
個人感覺應(yīng)該是亂碼,沒有意義。
   
作者: robinhappiness    時間: 2015-10-07 12:16
回復(fù) 6# Herowinter

比如第五行”漢”的后面是”膛”字,如果”膛”字全部顯示在第五行的話,第五行就邊成了10個byte換行了,
所以把”膛”字的左半部分”月”顯示在第五行最末尾,膛字右半部分”堂”顯示到第六行行首。
月和堂分割開之后各占一個byte。

想要的結(jié)果是:
123456789
987654321
777777777
999999999
ddd---漢月
堂----wqej
q23pjrqia
erfpqbbbb
b


作者: zxy877298415    時間: 2015-10-07 12:36
回復(fù) 1# robinhappiness
awk -F '' '{for(i=1;i<=NF;i++) if(i%9==0) {print $i} else {printf $i}}' file


   
作者: Herowinter    時間: 2015-10-07 13:01
本帖最后由 Herowinter 于 2015-10-07 13:05 編輯

回復(fù) 7# robinhappiness

這個我不會,非左右的漢字你也能拆?
比如
123456789987654321777777777999999999ddd---國慶----wqejq23pjrqiaerfpqbbbbb

建議你看看locale和encoding

   
作者: KoomIer    時間: 2015-10-07 16:12
漢字左右半拆的需求,是不是你自己yy的啊
作者: robinhappiness    時間: 2015-10-07 18:41
實在抱歉,之前我描述的問題不詳細(xì)。我的意思是在文本文件中的指定字節(jié)數(shù)位置能夠自動換行就可以。指定字節(jié)數(shù)的位置肯定不會出現(xiàn)文字要分開的情況。
文件內(nèi)容中有包含空格的情況。
#cat test.txt
12□□56789□□□weaeaweawe□□□□□1223漢字21434314r513□□dasdssdads
上面記錄中的□代表只占一個字節(jié)的空格的意思。

換行位置在每行的第10個byte開始,換行之后的文件如下:
被拆分的每行記錄(包括空格)所占的字節(jié)總數(shù)為9。

#cat new.txt
12  56789
   weaeaw
eawe     
1223漢字2
1434314r5
13  dasds
sdads


作者: Herowinter    時間: 2015-10-07 20:49
本帖最后由 Herowinter 于 2015-10-07 21:03 編輯

回復(fù) 11# robinhappiness


試試這個吧,再不行我也不會了。。。
  1. awk '{j=0;s=1;for(i=1;i<=length($0);i++){c=substr($0,i,1);if(c>"\177")j+=2;else j+=1;if(j>=9){print substr($0,s,i-s+1);j=0;s=i+1}}}' test.txt
復(fù)制代碼
效果這樣的:


   
作者: robinhappiness    時間: 2015-10-07 23:11
本帖最后由 robinhappiness 于 2015-10-07 23:50 編輯

回復(fù) 12# Herowinter

非常感謝耐心解答!可能我的意思還是沒有完全表達(dá)明白,實在抱歉!

#cat text.txt
123456789a  bcdefghij   klm漢字12345拼音67  891023

換行肯定是從第10個byte開始換,出現(xiàn)在第10個byte位置的內(nèi)容肯定不會出現(xiàn)占兩個byte的漢字,并且第10個byte肯定有值(不為空)。

對text.txt的處理過程,分割后的每行長度都是整好9個byte,每次處理過程如下:

第一次處理,在第十個字節(jié)位置換行:
123456789
a  bcdefghij   klm漢字12345拼音67

第二次處理,在第十個字節(jié)位置換行:
123456789
a  bcdefg
hij   klm漢字12345拼音67  891023

第三次處理,在第十個字節(jié)位置換行:
123456789
a  bcdefg
hij   klm
漢字12345拼音67  891023

第四次處理,在第十個字節(jié)位置換行:
123456789
a  bcdefg
hij   klm
漢字12345
拼音67


如下的這種換行情況是不會出現(xiàn)的,:
123456789
漢字漢字漢
字漢字123
12345678
作者: robinhappiness    時間: 2015-10-08 08:20
簡單的說就是被分割的文件內(nèi)容沒有換行
#cat test.txt
123456  91文字213141516171819202122abcd

命令執(zhí)行后,指定從每行的第9個byte之后也就是第10個byte開始換行,經(jīng)過命令分割之后文件如下,每行正好占9個byte。
被分割的對象的換行位置(第10個byte的位置)肯定有值。
#cat new.txt
123456  9
1文字2131
41516171
81920212
2abcd
作者: robinhappiness    時間: 2015-10-08 09:17
回復(fù) 12# Herowinter

你好!我測試了一下這個命令,從第10byte開始換行OK.

之后我又做了一個測試,如果被分割的文件內(nèi)容有6200個字節(jié)長,想要對無換行的文件內(nèi)容的每3000byte進(jìn)行一次換行時,將如下命令j>=9修改成j>=3000,之后運行結(jié)果發(fā)現(xiàn)在輸出文件在第一行的3001byte的位置雖然正確換行,但輸出文件中的3000byte以后的數(shù)據(jù)(3001byte~6200byte)全部消失了。請教一下是在哪里出的問題?多謝了!

awk '{j=0;s=1;for(i=1;i<=length($0);i++){c=substr($0,i,1);if(c>"\177")j+=2;else j+=1;if(j>=3000){print substr($0,s,i-s+1);j=0;s=i+1}}}' test.txt
作者: Herowinter    時間: 2015-10-08 10:18
本帖最后由 Herowinter 于 2015-10-08 10:18 編輯

回復(fù) 15# robinhappiness

有個bug忘了輸出最后剩下的字符串了,試試這個.
  1. awk '{j=0;s=1;for(i=1;i<=length($0);i++){c=substr($0,i,1);if(c>"\177")j+=2;else j+=1;if(j>=3000){print substr($0,s,i-s+1);j=0;s=i+1}};if(s<=length($0))print substr($0,s)}' test.txt
復(fù)制代碼

作者: robinhappiness    時間: 2015-10-08 11:47
回復(fù) 16# Herowinter

執(zhí)行了這個命令,出現(xiàn)一個狀況:
如果被分割的對象如果都是只占一個byte的字母或者數(shù)字符號等,都能夠正確的每3000byte換行。

但如果在3001byte的位置是漢字或者漢字以外(占兩個byte)的字符話,3001byte位置的漢字以及漢字后面的內(nèi)容就全部無法顯示出來。也就是說3001byte開始的漢字以及漢字以后的內(nèi)容就全被清除了!
或者在30001byte換行之前出現(xiàn)漢字或者全角字符(占兩個byte)的字符話,字符以及字符后面的內(nèi)容也全部不顯示,被清除掉了!請教如何解決?謝謝!

awk '{j=0;s=1;for(i=1;i<=length($0);i++){c=substr($0,i,1);if(c>"\177")j+=2;else j+=1;if(j>=3000){print substr($0,s,i-s+1);j=0;s=i+1}};if(s<=length($0))print substr($0,s)}' test.txt
作者: Herowinter    時間: 2015-10-08 12:09
回復(fù) 17# robinhappiness

貼個簡化的問題描述出來吧, 這樣我很難理解.
只需要:

初始文本
期望結(jié)果
實際結(jié)果

這三項就可以了.
   
作者: yestreenstars    時間: 2015-10-08 12:29
  1. sed 's/./&\n/9;P;D'
復(fù)制代碼

作者: robinhappiness    時間: 2015-10-08 13:10
回復(fù) 18# Herowinter

謝謝!

初始文本
1234漢字789w  rdfdfg中國abcd

期望結(jié)果
1234漢字7
89w  rdfd
fg中國abc
d

實際結(jié)果
1234


   
作者: Herowinter    時間: 2015-10-08 13:18
回復(fù) 20# robinhappiness


我這邊結(jié)果是對的.

  1. echo "1234漢字789w  rdfdfg中國abcd"|awk '{j=0;s=1;for(i=1;i<=length($0);i++){c=substr($0,i,1);if(c>"\177")j+=2;else j+=1;if(j>=9){print substr($0,s,i-s+1);j=0;s=i+1}};if(s<=length($0))print substr($0,s)}'
  2. 1234漢字7
  3. 89w  rdfd
  4. fg中國abc
  5. d
復(fù)制代碼

作者: robinhappiness    時間: 2015-10-08 13:23
回復(fù) 19# yestreenstars

謝謝!實際執(zhí)行結(jié)果和期望結(jié)果不同。

初始文本
123  45漢1A 字字123rwqaer23143125r243 325r24t24t244252

期望結(jié)果
123  45漢1
A 字字123
rwqaer231
43125r243
325r24t2
4t244252

實際結(jié)果
123  45漢1A
字字123rwqae
r23143125
r243 325r
24t24t244
252

作者: robinhappiness    時間: 2015-10-08 13:51
Herowinter 發(fā)表于 2015-10-08 13:18
回復(fù) 20# robinhappiness



非常感謝!郁悶的是被換行的文件中含有只占一個byte的漢字。汗!
比方カ只占一個字節(jié),但是程序執(zhí)行的時候被當(dāng)作兩個字節(jié)來算的。

初始文本
1234漢字789w  rdカカfg中國abcd

期望結(jié)果
1234漢字7
89w  rdカカ
fg中國abc
d

實際結(jié)果
1234漢字7
89w  rdカ
カfg中國a
bcd


作者: Herowinter    時間: 2015-10-08 14:02
回復(fù) 23# robinhappiness
ascii碼>127的字符長度都當(dāng)作2來處理, 程序里就是這么寫的.

   
作者: reyleon    時間: 2015-10-08 16:04
整了半天, 難不成命令 fold -9 是你需要的 ?


[root@localhost ~]# echo '1234漢字789w  rdfdfg中國abcd'  | fold -9
1234漢字7
89w  rdfd
fg中國abc
d
[root@localhost ~]# echo '123  45漢1A 字字123rwqaer23143125r243 325r24t24t244252' | fold -9
123  45漢
1A 字字12
3rwqaer23
143125r24
3 325r24t
24t244252
[root@localhost ~]# echo '1234漢字789w  rd??fg中國abcd' | fold -9
1234漢字7
89w  rd??
fg中國abc
d
[root@localhost ~]#


不過, 為啥初始文本
123  45漢1A 字字123rwqaer23143125r243 325r24t24t244252

而期望結(jié)果是
123  45漢1
A 字字123
rwqaer231
43125r243
325r24t2
4t244252

而不是
123  45漢
1A 字字12
3rwqaer23
143125r24
3 325r24t
24t244252

不是每行占九個字節(jié)嘛?   

整的啥玩意兒
作者: Herowinter    時間: 2015-10-08 17:48
回復(fù) 25# reyleon

六神威武啊, 我感覺就是fold -9啊.
   
作者: robinhappiness    時間: 2015-10-08 17:55
謝謝大家回復(fù)!

我深信大家回復(fù)的命令都沒錯誤,
嚴(yán)重懷疑是被分割的對象文件內(nèi)容有問題,
分割之后的文件下載到本地打開時,彈出兩個提示選項
其中一個是說文件中包含無法顯示的字符,是否需要跳過。
另外一個選項提示說改變成其它文字code再打開。
選擇其中任何一個選項打開文件之后,發(fā)現(xiàn)文件不是按照想要的指定的byte數(shù)位置換行。估計是分割對象的文本內(nèi)容有問題。

我打算再用nkf這個工具試試看!再次非常感謝大家的幫助!
作者: reyleon    時間: 2015-10-08 18:30
回復(fù) 26# Herowinter


    樓主有點兒坑爹
作者: baby_神    時間: 2015-10-08 20:06
看著這些“神回復(fù)”,我也是醉了,把漢字左右拆,linux認(rèn)識漢字么?
作者: baby_神    時間: 2015-10-08 20:06
本帖最后由 baby_神 于 2015-10-08 20:07 編輯

新手過來學(xué)習(xí)下,
作者: xdsnet    時間: 2015-10-09 10:12
其實樓主理解了漢字編碼與漢字的現(xiàn)實之間的關(guān)系就不會問很多問題了。
文本文件中字符(包括漢字)的顯示和編碼只是一個查表關(guān)系,文本文件實質(zhì)只存儲了一個編碼序列。
編碼是一個規(guī)范,在一個文本文件中只能有唯一的編碼規(guī)范,但有很多編碼規(guī)范。
不同的編碼規(guī)范能處理的文本字符的數(shù)量不同。
編碼規(guī)范也是一種規(guī)范的表格,所謂的編碼就是在一定規(guī)范下,一個數(shù)字對應(yīng)的文本字符的集合
編碼規(guī)范還定義了文本存儲數(shù)據(jù)流時如何解析數(shù)據(jù)。因為存在多字節(jié)編碼,所以如果對多字節(jié)編碼進(jìn)行不恰當(dāng)?shù)姆指魰斐删幋a解讀錯誤(即信息不完整,不能正確解讀查找到對應(yīng)的文本字符),所以要盡量避免類似的操作(而樓主前面則想實現(xiàn)這樣操作)

另文本字符的顯示就是解讀出字符后,再查表獲取指定字體中該字符的顯示(點陣/矢量 字模)顯示出來,所以樓主前面期望的在文本中把漢字左右分開,以及漢字偏旁“カ”只占一半是臆想的結(jié)果,是不可能在純文本文件中實現(xiàn)的。如果只按字節(jié)對齊分隔文本,最終結(jié)果只是會出現(xiàn)很多不可顯示的字符。

現(xiàn)代程序可以把整個可顯示字符(完整的)計數(shù)為1個(不區(qū)分中文、英文或者其他語種中的單獨字符),這樣以統(tǒng)一處理,進(jìn)行文本文件展示時的合理斷開(起碼不產(chǎn)生不可顯示/正常讀取字符)。這也是大多數(shù)處理時需要的效果。
作者: fh21_xuejinlian    時間: 2016-09-05 14:03
awk '{l=split($0,a,"");for(i=1;i<=l;i++)printf i%9==0?a[i]"\n":a[i]}' 1




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