1

私は次のようなデータを持っています:

1 company 123
2 company name 321
3 company name, Inc. 456

各行には3つのフィールドが含まれています。役職、会社名、最後の数字のセットがインデックスになります。

私はAWKで次のようなことができることを知っています:

% cat companylist.txt | awk ' { print $1} '

ポジション番号をうまく処理します。また、$ NFを使用すると、インデックスである最後の数値が取得されます。しかし、会社名の真ん中のフィールドはどうですか?これを解析して、位置、会社名、インデックスの3つのフィールドを作成するにはどうすればよいですか。

これは、私のニーズに合わせてAWKまたはPHPで実行できます。ありがとうございます。

4

3 に答える 3

3

開始と終了に固定されている2つの数値の間の文字列をチェックする正規表現を使用できます。

何かのようなもの:

#^\d+\s+(.*)\s+\d+$#
 ^^^^^^^    ^^^^^^ anchor numbers to end and start with at least one space after and before

文字列での使用preg_match

$pattern = '#^\d+\s+(.*)\s+\d+$#';
preg_match($pattern, $one_line_of_list, $matches);

編集:数字もキャプチャするには、パターンを次のように変更します。

$pattern = '#^(\d+)\s+(.*)\s+(\d+)$#';
于 2013-03-18T20:12:00.113 に答える
1

これは通常の入力ファイルではありません。たとえば、TAB区切りではありません。そのような場合、最初のフィールドと最後のフィールドがあり、中央に1つのフィールドと見なされる任意の数のフィールドがある場合、次のようなことができます。

awk '{$1=$NF=""; $0=$0; $1=$1}1' file

中央の「フィールド」内の単語間のスペースの数が重要でない場合。それ以外の場合は、次のことを試すことができます。

awk '{gsub("^" $1 "[ \t]*|[ \t]*" $NF "$","")}1' file
于 2013-03-18T21:31:11.337 に答える
1

データのソース、つまりテキストドキュメントを提供しなかったため。ソースからデータを読み取るためのコード行を含めることができなかったため、データの出所をループするために、最初に何かを追加する必要があります。データを取得してループメカニズムを作成したら、このコードを使用してデータを3つの変数にフォーマットし、それを使って別のことを行うことができます。

<?php
$string=line; // get a single line into the $string variable, from a loop or whatever.
$linearray=explode(' ', $string);
$lastplace=count($linearray)-1; // subtract 1 to account for starting from 0 in array
$position=$linearray[0]; // first one will always be the position
$index=$linearray[$lastplace]; // last one will always be the index
$i=1; //starting array position for your while loop
$companyname=""; //start company name with an empty string
while($i<$lastplace){ //cycle through all the middle chunks of the array to get the     company name
    $companyname.=$linearray[$i]; //adds any bits in the middle to the company name
    $companyname.=" "//adds a space in case there are more parts to add to it
    $i++;
}
// add function here to do something with the data

?>

会社名の最後の部分である場合は、最後のスペースを追加しないように、より洗練されたチェックを作成することもできます。

于 2013-03-18T20:26:32.083 に答える