INPUT:   vgxyxgf.de.foo.net  asdf    34efg   sdtds.de.foo.net    xyyxv   e5432   asdfycfb.us.foo.net dfvasf  34525

OUTPUT:   vgxyxgf   sdtds   asdfycfb

How can I make the OUTPUT? Like "awk '{SOMEMAGIC}' foo.txt

So I have the "INPUT" and I need a /etc/hosts file style OUTPUT... :\

  • Can you clarify your question? – gabe. Jan 27 '12 at 1:01

With awk

awk '{sub(/\..*/,"",$2);$0=$1 "  "$2}1' foo.txt

With sed

sed 's/^\(\([^.]*\.\)\{4\}\).*$/\1/;s/\.$//' foo.txt
| improve this answer | |
  • I don't know how it works... but it work!! wow.. – LanceBaynes Jan 26 '12 at 4:28
  • 1
    @LanceBaynes Magic of course! What I did was replace everything after the first dot in the 2nd field $2 with a null string. I then told awk that the current line $0 is only made up of the first field $1 followed by two spaces followed by the (altered) second field $2 – SiegeX Jan 26 '12 at 4:36

Just for fun, here's a non-awk, non-sed answer:

cut -f1-4 -d. foo.txt
| improve this answer | |

Another awk solution, analogous to Steven's cut answer:

awk -F. -v OFS=. '{print $1, $2, $3, $4}' filename

Uses dots as the field separator, and prints the first 4 fields dot-separated.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.