5

9 桁の大学コードで始まり、5 桁のコース コードで終わるテキスト ファイルがあります。

512161000 EN5121 K. K. Jorge Institute of Engineering Education and Research, Nashik 61220 Mechanical Engineering [Second Shift] XOPENH 1 116 16978
517261123 EN5172 R. C. Rustom Institute of Technology, Shirpur 61220 Mechanical Engineering [Second Shift] YOPENH 1 100 29555
617561234 EN6175 abc xyz Education Trust, abc xyz College of Engineering,
Pune 61220 Mechanical Engineering [Second Shift] ZOPENH 2 105 25017

上記の 3 の例のように、改行があるエントリがいくつかあります。grep や awk などのコマンドを簡単に使用できるように、1 行目と 2 行目と同じように 3 行目と 4 行目を 1 つにマージする必要があります。

アップデート:

ケビンの答えはうまくいかないようです。

cat todel.txt
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,
Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531

cat todel.txt | perl -ne 'chomp; if (/^\d{9}/) { print "\n$_" } else { print "$_\n" }' 
Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531ege of,
4

8 に答える 8

1

データが「file.txt」にあると仮定して、行を元に戻すスキャンを次に示します。

cat file.txt | perl -ne 'chomp; if (/^\d{9}/) { print "\n$_" } else { print "$_\n" }'

これは、すべての有効なレコードが9桁の数字で始まることを前提としています。「chomp」は最初に改行を削除し、パターンは出力のどこに改行を表示するかを決定します。

于 2012-06-25T03:12:20.660 に答える
1

分割行について: このsedスクリプトでは、先頭の数字の後に (分割の最初の行に) 少なくとも 1 つのスペースがあり、末尾の数字の前に (分割の最後の行に) 少なくとも 1 つのスペースがあることを前提としています。分割線ごとに 1 つの分割。

Windows CRLF 改行または*nix LF での入力を受け入れるように変更されました。ただし、出力は *nix であることに注意してください \n

sed -nr 's/\r?$// # allow for '\r\n' newlines
         /^([0-9]{9}) .* ([0-9]{5})$/{p;b}
         /^([0-9]{9}) /{h;b}
         / ([0-9]{5})$/{x;G; s/\n//; p}' 

または、より短いが、おそらく読みにくい:

sed -nr 's/\r?$//; /^([0-9]{9}) /{/ ([0-9]{5})$/{p;b};h;b};/ ([0-9]{5})$/{x;G; s/\n//; p}' 

最も頻繁なテスト (完全な行) には 1 つの正規表現のみが含まれるのに対し、2 番目の (短い) スクリプトでは、最も頻繁なテストに 2 つの正規表現テストが必要になるため、最初のスクリプトの方が高速であると期待しています。

これが私が得る出力です。使用してGNU sed 4.2.1

512161000 EN5121 K. K. Jorge Institute of Engineering Education and Research, Nashik 61220 Mechanical Engineering [Second Shift] XOPENH 1 116 16978
517261123 EN5172 R. C. Rustom Institute of Technology, Shirpur 61220 Mechanical Engineering [Second Shift] YOPENH 1 100 29555
617561234 EN6175 abc xyz Education Trust, abc xyz College of Engineering,Pune 61220 enter code hereMechanical Engineering [Second Shift] ZOPENH 2 105 25017
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531
于 2012-06-25T03:39:48.850 に答える
1

これはあなたのために働くかもしれません:

sed ':a;$!N;/ [0-9]\{5\}\n[0-9]\{9\} /!s/\n//;ta;P;D' file

説明:

  • 行がスペース、5 桁、9 桁、スペースの順で終わらない場合は、改行を削除します。

編集:

テストデータ:

cat <<\! >/tmp/codel.txt
> 112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,
> Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531
> !
sed ':a;$!N;/\s[0-9]\{5\}\n[0-9]\{9\}\s/!s/\n//;ta;P;D' /tmp/codel.txt 
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531
sed ':a;$!N;/\s[0-9]\{5\}\n[0-9]\{9\}\s/!s/\n//;ta;P;D' /tmp/{codel.txt,codel.txt,codel.txt} 
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531
于 2012-06-25T03:54:32.717 に答える
0

これを試して

sed '/^[0-9]\{9\}/{h;};/^[0-9]\{9\}/!{x;G;s/\n//g;}' test | grep -E '[0-9]{5}$'
于 2012-06-25T04:26:56.643 に答える
0

これは、有効なレコードが 5 桁で終わると仮定して、含まれているデータ セットで機能します。

use Modern::Perl;

my $data = do{local $/; <DATA>};
$data =~ s/([^\d]{5})\n/$1 /sg;
say $data;


__DATA__
512161000 EN5121 K. K. Jorge Institute of Engineering Education and Research, Nashik 61220 Mechanical Engineering [Second Shift] XOPENH 1 116 16978
517261123 EN5172 R. C. Rustom Institute of Technology, Shirpur 61220 Mechanical Engineering [Second Shift] YOPENH 1 100 29555
617561234 EN6175 abc xyz Education Trust, abc xyz College of Engineering,
Pune 61220 Mechanical Engineering [Second Shift] ZOPENH 2 105 25017
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of,
Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 93531

出力:

512161000 EN5121 K. K. Jorge Institute of Engineering Education and Research, Nashik 61220 Mechanical Engineering [Second Shift] XOPENH 1 116 16978
517261123 EN5172 R. C. Rustom Institute of Technology, Shirpur 61220 Mechanical Engineering [Second Shift] YOPENH 1 100 29555
617561234 EN6175 abc xyz Education Trust, abc xyz College of Engineering, Pune 61220 Mechanical Engineering [Second Shift] ZOPENH 2 105 25017
112724510 EN1127 Jagadambha Bahuuddeshiya Gramin Vikas Sanstha's Jagdambha College of, Engineering and Technology, Yavatmal 24510 Computer Engineering LSCO 1 55 935315
于 2012-06-25T05:37:47.887 に答える
0

次のように、カンマの後にあるすべての改行を削除してみてください。

perl -i -pe 's/,\n/,/g' file.txt

おそらく、カンマの後にスペースを許可したいでしょう:

perl -i -pe 's/(,\s*)\n/$1/g' file.txt
于 2012-06-25T03:01:49.780 に答える