私はロボットフレームワークテストケースに取り組んでいます。私の要件は、以下のファイルを読み、場所に基づいて値を比較することです。たとえば、
- 3で始まる行。 3はID番号ですが、行全体を選択して位置に応じた値を比較する必要があります。 BRONYXは位置9で始まり、位置44のNEW YORK出力と比較する必要があります。この例では、BRONYXをNEWYORKに変更する必要があります。位置に基づいて文字列を抽出する方法。
3^G^G^G^GBRONX^GNY^G10457^GUSA^G^G^GBRONXはNEW YORKに変更する必要があります。 - 派生都市の例^ G ^ G ^ G ^ GNEW YORK ^ GNY ^ G10457 ^ G10457 ^ G ^ GBRONX郡845600^G-73.898500^G325^GSPU^GZ1^G^G^G^G^G^G ^ G^ニューヨーク-ニューアーク-ジャージー市、NY-NJ-PA首都圏統計地域^G35620^GE020^GZC5X^GMMMMVVVV ^G36005039500
例 2: ID 2 の行を選択します。この例では、位置9のMANHATTANをNew York(位置40)に変更する必要があります。 2^G^G^G^GMANHATTAN^GNY^G^GUSA^G^G^GMANHATTANはNEW YORKに変更する必要があります。 - 派生都市の例^ G ^ G ^ G ^ GNEW YORK ^ GNY ^ G ^ G ^ G ^ GNEWヨーク^G-73.966249^G425^GSPU^GG3^G^G^G^G^G^G^ ^G^G^G^G^G^GMMMMVVM^G
助けてもらえますか?
答え1
それぞれが^G
Control-G文字であると仮定します。つまり、ファイルは\a
ASCIIベル文字()を使用して区切られ、各行の5番目のフィールドを15番目のフィールドの値に設定しようとします。
awk -F '\a' 'BEGIN { OFS=FS } { $5 = $15 }; 1' file >newfile
これは、フィールド区切り文字をASCIIベル文字に設定するために使用されます-F '\a'
。次に、出力フィールド区切り文字を同じ文字に設定し、5番目のフィールドを15番目のフィールドの値に更新します。コードを後続すると、変更された1
レコードが出力されます。結果は、newfile
この例で呼び出されたファイルに書き込まれます。
最初のフィールド2
または最初のフィールドで3
始まる行にのみ影響し、次を使用しますか?
awk -F '\a' 'BEGIN { OFS=FS } $1 == 2 || $1 == 3 { $5 = $15 }; 1' file >newfile
結果は、デモ目的でのみマークダウンテーブル形式で指定されます。 4列はe
列、15列はo
列です。
ㅏ | 第二 | 氏 | D | 金利 | F | G | 時間 | 私 | ジェイ | K | 私 | 米 | N | ああ | 血 | キュー | アル字型 | S | ティー | あなた | V | 勝つ | X | ワイ | ジ | ああ | BB | CC | DD | この | FF | gg | ヘヘ | 二つ | ジエジへ | 笑 | 二つ | mm | 優しい | ああ | PP | ¥¥ | 春夏シーズン | TT | よく | ウェイウェイ | WW | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
サム | ニューヨーク | ニューヨーク | 10,457 | アメリカ | ブロンクスはニューヨークに変更する必要があります - 派生都市の例 | ニューヨーク | ニューヨーク | 10,457 | 10,457 | ブロンクス郡 | ブロンクス | ニューヨーク | アメリカ | 40.846… | -73.898… | 325 | SPU | Z1 | ニューヨーク - ニューアーク - ジャージー、ニューヨーク - ニュージャージー - ペンシルベニア州首都圏の統計地域 | 35,620 | E020 | ZC5X | MMMMMVVV | 36,005,039,500 | ||||||||||||||||||||||||
2 | ニューヨーク | ニューヨーク | アメリカ | マンハッタンはニューヨークに変更する必要があります - 派生都市の例 | ニューヨーク | ニューヨーク | ニューヨーク | アメリカ | 40.783… | -73.966… | 第425話 | SPU | G3 | MMMMMVVM |
答え2
SEへようこそ。いくつかの考え:
- ファイルをパイプし
hexdump
たり、xxd
人間が読むことができる表現を表示します。 strings
ファイルから読み取れるテキストを抽出するために使用されます。私の考えでは、これがあなたに役立つと思います。cut
および/またはhead
プラス記号を使用してtail
部分行を抽出するか、それぞれ行を選択します。sed
あるいは、awk
彼らはあなたの友人になることができますが、あなたがそれを使用する方法を学ぶ場合にのみ可能です。数年かかります。
場所に基づいて文字列を抽出する方法
この質問に基づいて話すのは難しいです。
出力と比較する必要があります
ソリューションを作成してもらいますか?何を試してみましたか?提案どおりに読んでいますかman awk
?それとも、Linuxはヒンディー語の文書を提供しませんか?
はい
もし文字列は長さが固定されていますもしファイルに改行文字がないため、単一のcut
呼び出しを使用できます。
$ echo my long string | cut -c4-8
出力:
long
気づくデータをよりよく表示するには、エディタまたはマークダウン形式を使用してください。
答え3
まず、すべてのCtrl + G文字を見つけて|
(パイプ)に置き換えました。
sed 's/^G/|/g' test.csv > output.csv
以下を使用して行全体を印刷できます。
grep ^6 output.csv
6
住民登録番号です。
6|LAKELINE MALL|||AUSTIN|TX||USA|||MALL EXAMPLE - POI|11066 PECAN PARK BLVD|||AUSTIN|TX|78613|78613||TRAVIS||AUSTIN|CEDAR PARK|USA||||||||30.468408|-97.803570|140|SPU|NA||||||||||||UUUUUVVM|