1

私は次のデータを持っています。できる限りのことを試みましたが、うまくいきませんでした...

Las Vegas Nevada 89102|US|Katrina Roetteler
zhen fo shan guang dong 528318|CN|tu min jung
Zurich  CH8022|CH|Kevin M Pearl
Cheltenham GL52 8XX|UK|Kevin M Pearl
Melbourne Vic 3000|AU|brent chandler
Bratislava  821 03|Slovak Republic|SUSTRIK MARTIN MGR.
Zurich 8032|CH|David Graf
Tokyo 178-0063|JP|takahiro ichihashi

次のように変更する必要があります。

Las Vegas Nevada|89102|US|Katrina Roetteler
zhen fo shan guang dong|528318|CN|tu min jung
Zurich |CH8022|CH|Kevin M Pearl
Cheltenham|GL52 8XX|UK|Kevin M Pearl
Melbourne Vic|3000|AU|brent chandler
Bratislava |821 03|Slovak Republic|SUSTRIK MARTIN MGR.
Zurich|8032|CH|David Graf
Tokyo|178-0063|JP|takahiro ichihashi

基本的に、郵便番号/郵便番号を別の列 (世界中のクライアントのさまざまな種類の郵便番号) に配置し、郵便番号/郵便番号を最初の縦棒の前に配置します。

ありがとう!

4

3 に答える 3

3

sed を使用:

sed 's/^\([A-Za-z ]*\) \([-A-Z 0-9]*|\)/\1|\2/' input

出力

Las Vegas Nevada|89102|US|Katrina Roetteler
zhen fo shan guang dong|528318|CN|tu min jung
Zurich |CH8022|CH|Kevin M Pearl
Cheltenham|GL52 8XX|UK|Kevin M Pearl
Melbourne Vic|3000|AU|brent chandler
Bratislava |821 03|Slovak Republic|SUSTRIK MARTIN MGR.
Zurich|8032|CH|David Graf
Tokyo|178-0063|JP|takahiro ichihashi
于 2013-04-24T20:48:18.823 に答える
1

awk の使用を開始するための何か:

{
    for (i = 1; i < NF; i++) {
        if ($i~/\|/) {
            if ($(i-1)~/[0-9]/) {
                $(i-1) = "|"$(i-1)
            } else {
            $i = "|"$i
            }
            break
        }
    }
}
{print}

出力:

Las Vegas Nevada |89102|US|Katrina Roetteler
zhen fo shan guang dong |528318|CN|tu min jung
Zurich |CH8022|CH|Kevin M Pearl
Cheltenham |GL52 8XX|UK|Kevin M Pearl
Melbourne Vic |3000|AU|brent chandler
Bratislava |821 03|Slovak Republic|SUSTRIK MARTIN MGR.
Zurich |8032|CH|David Graf
Tokyo |178-0063|JP|takahiro ichihashi
于 2013-04-24T21:03:28.587 に答える