The UNIX and Linux Forums  


Go Back   UNIXおよびLinuxフォーラム > トップフォーラム > シェルプログラミングとスクリプティング
Googleのunix.com



シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。

その他のUNIXおよびLinuxフォーラムトピックは参考にすること
スレッド スレッドスターター フォーラム 返信 最後の投稿
レポート生成(文字列の解析と分割)のファイルの構文解析 umar.shaikh シェルプログラミングとスクリプティング 8 2009年3月2日 01:38午前
Yaccの/ bisonの固定長フィールドの解析 sungita 高レベルのプログラミング 1 2009年1月27日 11:27午前
リードスペースでは、文字列を読み、その文字列の長さを見つける dayamatrix UNIXのダミー質問と回答のため 2 2008年11月13日 10:08午前
変数の長さを記録解析 バーブ UNIXのダミー質問と回答のため 17 2004年10月1日 09:37午前
データの解析との完全な長さを保持変数 app4dxh シェルプログラミングとスクリプティング 3 2002年11月22日 12:04午後

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek を搭載 Powered by Google
 
LinkBack スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2009年4月21日
ppat7046 ppat7046 is offline
登録ユーザー
  
 

参加日: 2007年7月
投稿: 24
286長さの文字列の解析

こんにちは友人、

私はしている。 txtファイルの13000記録している。
各レコード278の文字の長さ。

私は、以下の文字列を抽出するコードを使用していますし、約10分かかります。
どんな提案してください。

猫のファイル名。 txt |中の行を読む
する

のF1 \u003d ` | awkは' (印刷substr ( $ 1,1,9 ) ) ' ` $エコーライン
F2キー\u003d ` | awkは' (印刷substr ( $ 1,10,20 ) ) ' ` $エコーライン
F3選手権\u003d ` | awkは' (印刷substr ( $ 1,30,50 ) ) ' ` $エコーライン
F4を\u003d ` | awkは' (印刷substr ( $ 1,80,10 ) ) ' ` $エコーライン
F5キーを押し\u003d ` | awkは' (印刷substr ( $ 1,90,50 ) ) ' ` $エコーライン
F6キー\u003d ` | awkは' (印刷substr ( $ 1,140,10 ) ) ' ` $エコーライン
F7キー\u003d ` | awkは' (印刷substr ( $ 1,150,50 ) ) ' ` $エコーライン
F8キー\u003d ` | awkは' (印刷substr ( $ 1,200,10 ) ) ' ` $エコーライン
F9キーを押し\u003d ` | awkは' (印刷substr ( $ 1,210,50 ) ) ' ` $エコーライン
F10キーを押し\u003d ` | awkは' (印刷substr ( $ 1,260,10 ) ) ' ` $エコーライン
F11キーを押し\u003d ` | awkは' (印刷substr ( $ 1,270,8 ) ) ' ` $エコーライン
F12キー\u003d ` | awkは' (印刷substr ( $ 1,278,8 ) ) ' ` $エコーライン

S1を\u003d ` " $ F1のエコー| " $ F2キー" | " $ F3選手権" | " $ F4を" | " $ F5キーを" | " `
s2 \u003d ` " $ F6キーエコー| " $ F7キー" | " $ F8を" | " `
S3の\u003d ` " $ F9キーを押しエコー| " $ F10を" | " `
s4 \u003d ` " $ F11キーを押しエコー| " $ F12を`

S1を$ $ s2 $ s3の$ s4 >エコー> FinalResult.txt
完了した
  #2固定リンク)  
Old 2009年4月21日
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
モデレータ
  
 

参加日: 2005年2月
場所:ボストン、修士
投稿数:5128
nawk - fをfieldwidth.awkファイル名。 txt > FinalResul.txt

fieldwidth.awk :
コード:
function setFieldsByWidth(   i,n,FWS,start,copyd0) {
  # Licensed under GPL Peter S Tillier, 2003
  # NB corrupts $0
  copyd0 = $0                             # make copy of $0 to work on
  if (length(FIELDWIDTHS) == 0) {
    print "You need to set the width of the fields that you require" > "/dev/stderr"
    print "in the variable FIELDWIDTHS (NB: Upper case!)" > "/dev/stderr"
    exit(1)
  }

  if (!match(FIELDWIDTHS,/^[0-9 ]+$/)) {
    print "The variable FIELDWIDTHS must contain digits, separated" > "/dev/stderr"
    print "by spaces." > "/dev/stderr"
    exit(1)
  }

  n = split(FIELDWIDTHS,FWS)

  if (n == 1) {
    print "Warning: FIELDWIDTHS contains only one field width." > "/dev/stderr"
    print "Attempting to continue." > "/dev/stderr"
  }

  start = 1
  for (i=1; i <= n; i++) {
    $i = substr(copyd0,start,FWS[i])
    start = start + FWS[i]
  }
}

#Note that the "/dev/stderr" entries in some lines have wrapped.

#I then call setFieldsByWidth() in my main awk code as follows:
BEGIN {
  #FIELDWIDTHS="7 6 5 4 3 2 1" # for example
  # adjust the FIELDWIDTHS values as you see fit.
  FIELDWIDTHS="9 21 51 11 51 11 51 11 51 11 9 9" # for example
  OFS="|"
}
!/^[  ]*$/ {
  saveDollarZero = $0 # if you want it later
  setFieldsByWidth()
  # now we can manipulate $0, NF and $1 .. $NF as we wish
  # print $0 OFS
  print $1,$2,$3,$4,$5,$6,$7,$9,$10,$11,$12
  next
}
  #3固定リンク)  
Old 2009年4月21日
JerryHone JerryHone is offline
登録ユーザー
  
 

参加日: 2006年11月
場所:英国
投稿数: 178
単純な 法parse.awkスクリプトを作成することです

コード:
{
f1=substr($1,1,9);
f2=substr($1,10,20);
f3=substr($1,30,50);
f4=substr($1,80,10);
f5=substr($1,90,50);
f6=substr($1,140,10);
f7=substr($1,150,50);
f8=substr($1,200,10);
f9=substr($1,210,50);
f10=substr($1,260,10);
f11=substr($1,270,8);
f12=substr($1,278,8);

OFS="|";
print f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12;
print "\n";
}
を実行し

コード:
awk -f parse.awk filename.txt > FinalResult.txt
私は、元のコードは、新しいプロセス産卵されている各バック、エコー、 Awkのように長い時間がかかっていると考えている
  #4固定リンク)  
Old 2009年4月22日
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
シェルプログラマは、著者
  
 

参加日: 2007年3月
場所:トロント、カナダ
投稿数: 2361
コード:
awk '{
 print  substr($1,1,9) "|" \
        substr($1,10,20) "|" \
        substr($1,30,50) "|" \
        substr($1,80,10) "|" \
        substr($1,90,50) "|" \
        substr($1,140,10) "|" \
        substr($1,150,50) "|" \
        substr($1,200,10) "|" \
        substr($1,210,50) "|" \
        substr($1,260,10) "|" \
        substr($1,270,8) "|" \
        substr($1,278,8)
}' filename.txt > FinalResult.txt
  #5固定リンク)  
Old 2009年4月22日
amitmathapati amitmathapati is offline
登録ユーザー
  
 

参加日: 2009年4月
記事: 1
こんにちは皆さん..

どうすればこのような行がある
のBCD

これは、最初のフィールドのF1 \u003dは、 F2キー\u003d F3選手権\u003d BCDであることを示して
すなわち、 2番目のフィールド6空白文字をしている。だから私は、上記のスクリプトを使用する場合、私は、ケース内のフィールドを取得することはできませんよ。
にしてください場合にすることはできますがどうやるかはいかがでしょう?

歓声アミット
  #6固定リンク)  
Old 2009年4月22日
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
シェルプログラマは、著者
  
 

参加日: 2007年3月
場所:トロント、カナダ
投稿数: 2361

$ 1の代わりに$ 0を使用します(これは私が使用している必要があります) :

コード:
awk '{
 print  substr($0,1,9) "|" \
        substr($0,10,20) "|" \
        substr($0,30,50) "|" \
        substr($0,80,10) "|" \
        substr($0,90,50) "|" \
        substr($0,140,10) "|" \
        substr($0,150,50) "|" \
        substr($0,200,10) "|" \
        substr($0,210,50) "|" \
        substr($0,260,10) "|" \
        substr($0,270,8) "|" \
        substr($0,278,8)
}' filename.txt > FinalResult.txt
  #7固定リンク)  
Old 2009年4月22日
ppat7046 ppat7046 is offline
登録ユーザー
  
 

参加日: 2007年7月
投稿: 24
すべてのお返事をいただき、ありがとうございます。

私は提案cfajohnsonが提供する今は、 80万人の記録をパースするためにはわずか20 seccondsかかる。

本当にありがとうございます、
Prashant
Closed Thread

ブックマーク

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる 〜の上に




すべてGMT -4です。現在の時刻は 09:31午後


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
は、 UNIXおよびLinuxフォーラムのコンテンツ著作権© 1993 〜 2009 。すべての権利を管理しReserved.Ad RedTyger

コンテンツ関連のURLで vBSEO 3.2.0